public class LoadImage extends AsyncTask<String,Void,Bitmap>{
ImageView imageView;
public LoadImage(ImageView imageView){
this.imageView=imageView;
}
@Override
protected Bitmap doInBackground(String... params) {
Bitmap bitmap=null;
try {
bitmap=BitmapFactory.decodeStream(new URL(params[0]).openConnection().getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
imageView.setImageBitmap(bitmap);
}
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
ImageView imageView;
imageView=(ImageView)findViewById(R.id.imageView);
imageView.setImageBitmap(bitmap);
}
// 可以不用Constructor 傳入ImageView 直接在onPostExecute 做
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity);
String link="https://assets22.pokemon.com/assets/cms2/img/pokedex/full/010.png";
imageView=(ImageView)findViewById(R.id.imageView);
LoadImage loadImage=new LoadImage(imageView);
loadImage.execute(link);
}
- Make a new Class extends AsyncTask
- Define 你想傳入的東西在AsyncTask<>中
- 第一個是傳入想處理的東西,第二是VOID?,第三是傳到onPostExecute 的Type
- 在onCrearte 想傳入資料給AsyncTask 的話可自行弄個Constructor
- params[0] 應該是Array 的意思,聽說可傳入多於一樣的東西,所以得一樣是[0]
- doInBackground 的return 會傳給 onPostExecute
- 中間是Void 如果不傳入的話,傳入的話會傳給 onProgressUpdate
- AsyncTask.excute() 的東西傳給第一個<>
- 最後就是在onCreate 自己 new 一個新的出來 excute 就行了
請先 登入 以發表留言。