我的应用程序有一个带有ListView的活动,对于列表中的每个单元格,我需要从一个URL加载一个图像。但是,当我添加一行来加载图像时,应用程序就会崩溃。
我不知道错误是否是由我的代码或列表视图的某些单元格重用行为引起的,因为Logcat没有指向代码中的任何行。我确保传递的URL是正确的,不可能干扰。
我跟随本教程编写了这段代码。
下面是ListView适配器类,其中我在getView(...)上加载映像
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设置如下:
sharedImageLoader = new ImageLoader(Volley.newRequestQueue(context), new BitmapLruCache());BitmapLruCache是:
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错误:
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)下面是包含空指针异常的方法:
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();
}发布于 2014-03-19 17:54:28
您正在使用此库的过时版本,它缺少以下两个最近提交的内容:
6c33917合并“防止当请求被赋予主机为null的url时发生的NullPointerException。”菲克斯?柯克帕特里克--3周前-133-每周发行一次 0ec9297防止NullPointerException当前发生在向请求提供主机为null的url时发生的截击。三周前
用git更新您的工作版本,以反映项目存储库的当前状态,您应该会很好。检查这些差异时,更改基本上是添加和处理空检查。
https://stackoverflow.com/questions/22513486
复制相似问题