对于我的自定义列表视图,我正在使用AsyncTask进行Web服务调用,它运行正常。 “我的列表”视图具有左侧图像,标题,说明。该服务将返回(url,title,desc)列表。
在我的适配器中,我使用以下代码加载图像:
httpClient = new DefaultHttpClient(); HttpGet request = new HttpGet(url); response = httpClient.execute(request); InputStream is = response.getEntity().getContent(); Drawable drawable = Drawable.createFromStream(is, "src"); imgView.setImageDrawable(drawable);
但是在加载所有图片之前我无法看到列表视图,我知道我正在阻止UI线程,任何人都可以建议在没有UI阻塞的情况下执行此操作的最佳方法。
谢谢, Venkat Papana
答案 0 :(得分:3)
使用AsyncTask
或Thread
与Handler
一样,上述答案已经注明。
以下是从网址获取图片资源的快捷方式:
BitmapDrawable bitmapDrawable = new BitmapDrawable(BitmapFactory.decodeStream(new URL("http://example.com/path/to/image/file.jpg").openStream()));
创建1个AsyncTask
,然后在doInBackground
中循环浏览所有图片网址,并将每个生成的drawable添加到图标列表或其他内容
答案 1 :(得分:2)
new Thread(new Runnable() {
@Override
public void run() {
httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
response = httpClient.execute(request);
InputStream is = response.getEntity().getContent();
msg.obj=is;
mHandler.sendMessage(msg);
}
}).start();
你的句柄就像这样
mHandler = new Handler() {
@Override public void handleMessage(Message msg) {
InputStream is=(InputStream)msg.obj;
Drawable drawable = Drawable.createFromStream(is, "src");
imgView.setImageDrawable(drawable);
}
};
答案 2 :(得分:1)
也可以使用AsyncTask
进行图像加载。对于每个加载的图片,您可以从publishResults()
拨打doInBackground()
,然后让onProgressUpdate()
将图片放在正确的位置。
答案 3 :(得分:0)
这是更好的尝试方法..这适用于cardview中的图像加载
private class LoadImage extends AsyncTask<String, String, Bitmap> {
Bitmap bitmap1 = null;
CurrentVehicleStatus currentVehicleStatus;
int i;
@Override
protected void onPreExecute() {
super.onPreExecute();
//Stuff on preexecute
pDialog = new ProgressDialog(AdminActivity.this);
pDialog.setTitle("Please wait");
pDialog.setMessage("Loading data..");
pDialog.show();
}
protected Bitmap doInBackground(String... args) {
for(int i=0;i<arrayLength;i++) {
//Your class reference that store your values for adapter
yourClassReference = yourArrayList.get(i);
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL("Your URL"
).getContent());
} catch (Exception e) {
e.printStackTrace();
}
//this setImage method in data class
yourArrayList.get(i).setImage(bitmap);
}
}
return bitmap1;
}
protected void onPostExecute(Bitmap image) {
pDialog.dismiss();
//Notify adapter
mAdapter.notifyDataSetChanged();
}
}
有任何疑问评论我