【发布时间】:2014-10-31 16:08:55
【问题描述】:
这个问题是在这里提出的:Universal-Image-Loader: wrong Bitmaps are attached to ImageView
我使用的是最新的 1.9.3。我通过在我的应用程序类中实现了这个解决方案:
@Override
public void onCreate() {
super.onCreate();
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder().resetViewBeforeLoading(true).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.build();
ImageLoader.getInstance().init(config);
}
根据Android-Universal-Image-Loader doesn't keep loaded images on scroll in gridview,我在我的适配器中加载图像:
ImageAware imageAware = new ImageViewAware(viewHolder.profileIV, false);
ImageLoader.getInstance().displayImage(imgUrl, imageAware);
还是不行;我想知道是不是因为提供模型数据的 api 不包含图像 url,所以我必须调用来获取图像 url。
所以在我的适配器的 getView() 中,在我使用带有图像 url 的 imageloader 之前,我会执行另一个异步调用来获取图像 url,如下所示:
APIclient.getImageJson(getContext(), googleUrl, new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONObject imgJson) {
try {
JSONObject responseDataValue = imgJson.getJSONObject("responseData");
JSONArray resultsValue = responseDataValue.getJSONArray("results");
JSONObject result = resultsValue.getJSONObject(0);
String imgUrl = result.getString("url");
ImageAware imageAware = new ImageViewAware(viewHolder.profileIV, false);
ImageLoader.getInstance().displayImage(imgUrl, imageAware);
//ImageLoader.getInstance().displayImage(imgUrl, viewHolder.profileIV);
}
catch(Exception e) {
e.printStackTrace();
}
}
这里的谷歌网址看起来像:https://ajax.googleapis.com/ajax/services/search/images?rsz=1&start=1&v=1.0&q=%22barack%20obama%22
每一行都有不同的 url,因为名称不同。我不知道问题是否仍然是通用图像加载器库中未修复的列表视图回收器问题,或者罪魁祸首是否在于额外的网络调用。如何使缩略图与旁边的数据保持一致?
【问题讨论】:
-
APIclient.getImageJson(...)是任何图书馆吗?您可以同步执行 JSON 请求吗?如果你这样做了,那么我可以为你提供一个解决方案,只需编写同步 JSON 加载的代码。
标签: android image listview universal-image-loader