Android + Volley:如何使用ImageLoader获取图像位图?

时间:2015-08-24 10:40:04

标签: android bitmap android-volley image-loading

我正在尝试使用Volley Library获取列表视图的图像。我使用以下方法创建了简单的HTTP帮助程序。

...
contactForm.on('submit', function(e) {
  e.preventDefault();
  $.ajax({...});
...

但问题是:

/**
     * Processing Image request and gets the image with given URL
     */
    public Bitmap makeImageRequest(String url) {
        ImageLoader il = new ImageLoader(queue, new BitmapLruCache());
        il.get(url, new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
               mBitmap =  processImageResponse(response);

            }

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(Constants.Global.ERROR, "Error: " + error.getMessage());
                mBitmap = null;
            }
        });
        return mBitmap;
    }

无法识别方法。

所以我尝试使用以下代码在URL上创建ImageLoader:

http://www.androidhive.info/2014/05/android-working-with-volley-library-1/

new BitmapLruCache()

但是在代码中我无法找到从哪里获得

ImageLoader imageLoader = AppController.getInstance().getImageLoader();

因为方法代码是从自定义

触发的
AppController

使用:

从活动中调用
public class HttpHelperClass 

如何加载图片是正确的方法,我如何修复我的代码以获得成功请求?

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

我认为您的makeImageRequest方法将始终返回null,因为调用onResponseonErrorResponse侦听器需要一些时间,但您返回mBitmap不情愿地!

如果你想使用Volley ImageLoader,你最好在你的活动中获得图像,或者......不要像你的HttpHelperClass那样来自其他类。

同样AppController是一个扩展Application的类,您应该自己创建。 (它位于AndroidHive链接中。第3节。创建Volley Singleton类

同样,对于缓存图像,您不应每次都创建新的ImageLoader因为这样缓存变得毫无意义。你应该从你的AppController课程中获得。

此外,我建议您使用 Picasso ,因为它在图像加载方面比 Volley 更好,而且更容易! 使用Picasso,您只需调用以下行即可将图片从网络加载到ImageView

Picasso.with(context).load(urlString).to(imageView);