首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetworkImageView碰撞

NetworkImageView碰撞
EN

Stack Overflow用户
提问于 2014-03-19 17:21:08
回答 1查看 1.1K关注 0票数 2

我的应用程序有一个带有ListView的活动,对于列表中的每个单元格,我需要从一个URL加载一个图像。但是,当我添加一行来加载图像时,应用程序就会崩溃。

我不知道错误是否是由我的代码或列表视图的某些单元格重用行为引起的,因为Logcat没有指向代码中的任何行。我确保传递的URL是正确的,不可能干扰。

我跟随本教程编写了这段代码。

下面是ListView适配器类,其中我在getView(...)上加载映像

代码语言:javascript
复制
class CellAdapter extends BaseAdapter {

    Context context;
    List<Product> productList;
    private static LayoutInflater inflater = null;

    public CellAdapter(Context context, List<Product> productList) {
        this.context = context;
        this.productList = productList;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return productList.size();
    }

    @Override
    public Product getItem(int position) {
        return productList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        while (view == null)
            view = inflater.inflate(R.layout.product_result, null);

        NetworkImageView image = (NetworkImageView) view.findViewById(R.id.cell_product_image);
        image.setDefaultImageResId(R.drawable.image_placeholder);
        image.setImageUrl(getItem(position).imageURL, APIManager.getSharedImageLoader());

        return view;
    }
}

上面使用的ImageLoader设置如下:

代码语言:javascript
复制
sharedImageLoader = new ImageLoader(Volley.newRequestQueue(context), new BitmapLruCache());

BitmapLruCache是:

代码语言:javascript
复制
public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache {

    public BitmapLruCache() {
        this(getDefaultLruCacheSize());
    }

    public BitmapLruCache(int sizeInKiloBytes) {
        super(sizeInKiloBytes);
    }

    @Override
    protected int sizeOf(String key, Bitmap value) {
        return value.getRowBytes() * value.getHeight() / 1024;
    }

    @Override
    public Bitmap getBitmap(String url) {
        return get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
        put(url, bitmap);
    }

    public static int getDefaultLruCacheSize() {
        final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

        return maxMemory / 8;
    }
}

这是Logcat错误:

代码语言:javascript
复制
E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.android.volley.Request.<init>(Request.java:137)
            at com.android.volley.toolbox.ImageRequest.<init>(ImageRequest.java:71)
            at com.android.volley.toolbox.ImageLoader.get(ImageLoader.java:219)
            at com.android.volley.toolbox.NetworkImageView.loadImageIfNecessary(NetworkImageView.java:149)
            at com.android.volley.toolbox.NetworkImageView.onLayout(NetworkImageView.java:198)
            at android.view.View.layout(View.java:7175)
            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912)
            at android.view.View.layout(View.java:7175)
            at android.widget.ListView.setupChild(ListView.java:1833)
            at android.widget.ListView.makeAndAddView(ListView.java:1748)
            at android.widget.ListView.fillDown(ListView.java:670)
            at android.widget.ListView.fillFromTop(ListView.java:727)
            at android.widget.ListView.layoutChildren(ListView.java:1598)
            at android.widget.AbsListView.onLayout(AbsListView.java:1262)
            at android.view.View.layout(View.java:7175)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
            at android.view.View.layout(View.java:7175)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:343)
            at android.view.View.layout(View.java:7175)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
            at android.view.View.layout(View.java:7175)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:343)
            at android.view.View.layout(View.java:7175)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:343)
            at android.view.View.layout(View.java:7175)
            at android.view.ViewRoot.performTraversals(ViewRoot.java:1140)
            at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3714)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:853)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
            at dalvik.system.NativeStart.main(Native Method)

下面是包含空指针异常的方法:

代码语言:javascript
复制
    public Request(int method, String url, Response.ErrorListener listener) {
        mMethod = method;
        mUrl = url;
        mErrorListener = listener;
        setRetryPolicy(new DefaultRetryPolicy());
        /* the next line is line 137 with the Exception */
        mDefaultTrafficStatsTag = TextUtils.isEmpty(url) ? 0: Uri.parse(url).getHost().hashCode(); 
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 17:54:28

您正在使用此库的过时版本,它缺少以下两个最近提交的内容:

6c33917合并“防止当请求被赋予主机为null的url时发生的NullPointerException。”菲克斯?柯克帕特里克--3周前-133-每周发行一次 0ec9297防止NullPointerException当前发生在向请求提供主机为null的url时发生的截击。三周前

用git更新您的工作版本,以反映项目存储库的当前状态,您应该会很好。检查这些差异时,更改基本上是添加和处理空检查。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22513486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档