首先,先知道网络请求是一个耗时的操作。所以我们给他写入AsyncTask线程中,来请求网络信息。
我们先声明一个String类型用来写入网址,然后写一个类让它继承AsyncTask。写入它的三个参数<传入的参数的类型,读取网络数据的进度的类型,传出的参数类型>
在重写它的三个方法,在doInBackgroun方法中调用我们已经封装好的方法。
在onPostExecute方法中个更新控件内容。
/**
* @MainActivityImageAsyncTask:用于请求网络图片数据的AsyncTask
*/
class MainActivityImageAsyncTask extends AsyncTask<String,Void,Bitmap>{
@Override
protected Bitmap doInBackground(String... pasem) {
Bitmap bitmap = StartAsyncTask.getUrlHttpBitmap(pasem[0]);
return bitmap;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
asynctaskIm.setImageBitmap(bitmap);
}
}
下面我们来看封装的方法
/**
* @getUrlHttpBitmap:用于请求网络图片数据
*/
public static Bitmap getUrlHttpBitmap(String path){
Bitmap bitmap = null;
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream is = connection.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bitmap = BitmapFactory.decodeStream(bis);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
最后我们在onCreate启动这个线程
new MainActivityImageAsyncTask().execute(imuri);