我遇到一种情况,首先图片的网址应该从微博的API获得,然后,我想显示基于url的图片:
这里使用的是Volley,下面是我的代码:
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("Result", response.toString());
try {
String weiboNickName = response.getString("name");
weiboNameMain.setText(weiboNickName);
weiboUrl = response.getString("avatar_hd");
weiboUrl = weiboUrl.replace("\\", "");
Toast.makeText(MainPage.this, "url: " + weiboUrl, Toast.LENGTH_SHORT).show(); imageLoader = new ImageLoader(queue, new BitmapLruCache(BitmapLruCache.getDefaultLruCacheSize()));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(jsObjRequest);
imageLoader.get(weiboUrl,ImageLoader.getImageListener(weiboAvatarMain,R.drawable.user, R.drawable.user));但是,当对最后一个句子使用一个NullPointerException时,我将得到一个weiboUrl:
imageLoader.get(weiboUrl,ImageLoader.getImageListener(weiboAvatarMain,R.drawable.user, R.drawable.user));我知道这是因为Volley会创建另一个线程,所以在请求中的线程结束之前,我不应该使用主线程中的引用。
有什么想法可以用来解决这个问题吗?
提前谢谢。
最好的
-更新
问题是我把
imageLoader.get(weiboUrl,ImageLoader.getImageListener(weiboAvatarMain,R.drawable.user, R.drawable.user));在一个错误的位置。如果我把它放在jsObject的onResponse()方法中,问题就没有了。然后可以使用图像缓存。(ImageRequest本身并不拥有缓存机制)
发布于 2013-12-22 08:38:09
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("Result", response.toString());
try {
String weiboNickName = response.getString("name");
weiboNameMain.setText(weiboNickName);
weiboUrl = response.getString("avatar_hd");
weiboUrl = weiboUrl.replace("\\", "");
Response.Listener<Bitmap> listener = new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
String weiboAvatar = ImageHandler.storeImage(bitmap, getRoot(), getWeiboAvatarName());
Log.i("store info", weiboAvatar);
Editor edit = preference.edit();
edit.putString("weiboAvatar", weiboAvatar);
edit.apply();
weiboAvatarMain.setImageBitmap(bitmap);
}
};
ImageRequest imgRequest = new ImageRequest(weiboUrl, listener, 0, 0, null, null);
queue.add(imgRequest);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(jsObjRequest);我使用ImageRequest而不是ImageLoader来克服这个问题,它是有效的。这里的场景是图像不会超时更改,所以我将其保存到本地文件中。
然而,由于ImageLoader支持图像读取的缓存,我真的需要缓存读取的解决方案。
谢谢。
https://stackoverflow.com/questions/20726896
复制相似问题