当前位置: 代码迷 >> Android >> 实在是找不到原因了!java.lang.NullPointerException,该怎么解决
  详细解决方案

实在是找不到原因了!java.lang.NullPointerException,该怎么解决

热度:71   发布时间:2016-04-28 04:20:27.0
实在是找不到原因了!java.lang.NullPointerException
你好

我用volley加载图片的时候在下面红色的一行遇到如下报错(BitmapCache是有的)

FATAL EXCEPTION: main
java.lang.NullPointerException

部分代码
    

  catergory_listview=(ListView)this.findViewById(R.id.app_config_list_main);
    catergory_listview.setAdapter(new CatergorAdapter(this));

public class CatergorAdapter extends BaseAdapter{

    private Context ctx;
    private RequestQueue mQueue;
    private ImageLoader mImageLoader;
    
    public CatergorAdapter(Context ctx) {
      this.ctx = ctx;
      mQueue = Volley.newRequestQueue(ctx);
      mImageLoader = new ImageLoader(mQueue, new BitmapCache());
    }

    @Override
    public int getCount() {
       return mImageIds.length;
    }

    @Override
    public Object getItem(int position) {
     return mImageIds[position];
   }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

      convertView = LayoutInflater.from(ctx).inflate(R.layout.activity_category_item, null);
      ImageView imageView  = (ImageView) convertView.findViewById(R.id.catergory_image);
      TextView catergoryItemTitle = (TextView)convertView.findViewById(R.id.catergoryitem_title);
      TextView catergoryItemContent = (TextView)convertView.findViewById(R.id.catergoryitem_content);
      
      ImageListener listener = ImageLoader.getImageListener(imageView, android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete);
          mImageLoader.get(mImageIds[position].toString(), listener);
          catergoryItemTitle.setText(mTitleValues[position]);
          catergoryItemContent.setText(mContentValues[position]);

//适配显示的图片数组
  private Integer[] mImageIds = {R.drawable.catergory_appliance,R.drawable.catergory_book    };

BitmapCache.java
public class BitmapCache implements ImageCache {
  private LruCache<String, Bitmap> mCache;
  
  public BitmapCache() {
    int maxSize = 10 * 1024 * 1024;
    mCache = new LruCache<String, Bitmap>(maxSize) {
      @Override
      protected int sizeOf(String key, Bitmap value) {
        return value.getRowBytes() * value.getHeight();
      }
      
    };
  }

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

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

}

------解决方案--------------------
先弄清楚是那个对象报的NullPointerException ,mImageLoader? mImageIds?
------解决方案--------------------
debug一下看那个为空
------解决方案--------------------
mImageLoader在构造中new了,不可能为空
改成下面这个,如果还有空指针,就是mImageLoader.get里的问题了
mImageLoader.get(""+mImageIds[position], listener);
------解决方案--------------------
(mImageIds[position] null ?
------解决方案--------------------
把报错信息给贴出来,nullpointer很好确认的
------解决方案--------------------
我的一篇博客,可以学习学习:
http://blog.csdn.net/gao_chun/article/details/34117083
------解决方案--------------------
你需要在你这个应用程序中配置一些相关的Volley设置项,你应该没有配置。
比如在你的程序里面配置一下
Volley.newRequestQueue这个方法试试,如果还不行,你看看volley还有其他什么要配置的
------解决方案--------------------
//适配显示的图片数组
  private Integer[] mImageIds = {R.drawable.catergory_appliance,R.drawable.catergory_book    };
这个放到前面定义
  相关解决方案