加载图片:
操作之前,写好网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
设置好布局文件,给按钮设置好监听后,重新创建一个单独的类,继承AsyncTask,需要用到Bitmap对象
public class PicLoadTask extends AsyncTask<String,Integer,Bitmap>{
private ImageView imageView;
//为什么要加一个构造方法--因为有传值的需求
public PicLoadTask(ImageView iv){
this.imageView = iv;
}
@Override
protected Bitmap doInBackground(String... strings) {
//加载网络图片,最后获取到一个Bitmap对象,返回Bitmap对象
Bitmap bm = null;
try {
URL url = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream inputStream = connection.getInputStream();
bm = BitmapFactory.decodeStream(inputStream); //把输入流转换成Bitmap类型对象
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bm;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
imageView.setImageBitmap(bitmap);
}
}
构造方法:因为有传值的需求;
在子线程doInBackground中进行获取图片的耗时操作:
1.创建URL对象,传入参数strings[0];
2.调用openConnextion()方法获得HttpURLConnection对象;
3. 建inputstream对象,通过httpurlconnection对象来获取文件流赋给inputstream对象;
4.建一个Bitmap对象,然后通过BitmapFactory.decodeStream()解码图片,再赋给Bitmap对象。
MainActivity中的代码:
public class PicActivity extends AppCompatActivity {
private ImageView Image;
private Button downloadBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pic);
bind();
downloadBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PicLoadTask task = new PicLoadTask(Image);
task.execute("http://img1.bitautoimg.com/bitauto/2012/09/17/a50cdcf8-1a2a-418b-b7be-d81f36ab12ee");
}
});
}
private void bind() {
Image = findViewById(R.id.image);
downloadBtn = findViewById(R.id.download_Btn);
}
}