我想在我的 ListView 中实现延迟加载图像。首先,我需要连接到一个 url 并获取属于一个对象的所有图像的 urlStrings。我得到一个 jsonString 然后解析:
String RESTUrl = new MasterdataDataProvider(mContext).getSyncServicePath() + "PhotoInfo/" + objectEntryID;
List<String> urlStrings = new ArrayList<String>();
try {
HttpGet httpGet = new HttpGet((RESTUrl + "/" + token));
HttpParams httpParameters = new BasicHttpParams();
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
httpGet.addHeader("Accept", "application/json");
httpGet.addHeader("Content-Type", "application/json");
HttpResponse response = httpClient.execute(httpGet);
String jsonData = EntityUtils.toString(response.getEntity());
if (!jsonData.equals("[]")) {
GsonPhotoInfo x = new GsonPhotoInfo(new GsonBuilder());
PhotoInfo[] info = x.parseJSON(jsonData);
for(PhotoInfo p : info) {
System.out.println(p.getFileName());
urlStrings.add(photoWebURL + objectDefID + "/" + objectEntryID + "/" + p.getFileName());
}
}
} catch(Exception e) {
e.printStackTrace();
}
正如您在这段代码中看到的那样,我获取FileName from jsonData
.
然后我需要从 urlStrings 下载图像:
final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
ImagePagerAdapter adapter = new ImagePagerAdapter((Drawable[]) message.obj);
viewPager.setAdapter(adapter);
}
};
Thread thread = new Thread() {
@Override
public void run() {
//PARSE THE JSON DATA and FETCH URLStrings (as you see in the piece of code at top)
Drawable[] drawables = new Drawable[urlStrings.size()];
for(int i=0; i< urlStrings.size(); i++)
drawables[i] = fetchDrawable(urlStrings.get(i));
Message message = handler.obtainMessage(1, drawables);
handler.sendMessage(message);
}
};
thread.start();
获取图像的代码取自James Wilson 的答案。
所以你也可以看到,我必须再次使用 HTTPClient 来下载每个图像:
private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
问题是它在我的 listView 中不起作用。The images are not loaded correctly in listView sometimes
,我只是想知道是不是因为这样:
- 我从 jsonData 获取 urlStrings,然后
- 一张一张地从 urlStrings 下载图片。
我的意思是我连接到 REST 两次。我也在使用 aHandler
这可能不是一个好的选择,但实际上我用 a 测试了它AsyncTask
并且我遇到了同样的问题。
我感谢任何可以解决我的问题的想法。
附加物:
当我快速滚动列表时,我发现图像加载不正确,否则很好。