当我将这三个参数传递给延迟加载类时,Java空指针异常

时间:2011-07-12 12:11:52

标签: android lazy-loading nullpointerexception

@Override
    public View getView(int position, View convertView, ViewGroup parent)   
    {
        ViewHolder holder;
        if(convertView == null)
        { 
            convertView = inflater.inflate(R.layout.photodata,null);

            myHolder = new ViewHolder();
            try
            {  
                myHolder.imgPhoto = (ImageView) convertView.findViewById(R.id.imgPhoto);            
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            convertView.setTag(myHolder);
        }
        else
        {
            myHolder = (ViewHolder)convertView.getTag();
        }
        System.out.println("String image is" + getItem(position).photo);
        myHolder.imgPhoto.setTag(getItem(position).photo);
        System.out.println("String image is" + getItem(position).photo);
        imageLoader.DisplayImage(getItem(position).photo,activity, myHolder.imgPhoto);

        return convertView;
    }

错误:

FATAL EXCEPTION: main
java.lang.NullPointerException
 at.com.android.adapter.PhotoAdater.getView(PhotoAdater.java:59)
 at.android.widget.AbsListView.obtainView(AbsListView.java:1315)

3 个答案:

答案 0 :(得分:1)

您要声明的此代码,

 ViewHolder holder;

但你使用的是不同的对象,

myHolder.imgPhoto= (ImageView) convertView.findViewById(R.id.imgPhoto);   

改为,

 holder.imgPhoto= (ImageView) convertView.findViewById(R.id.imgPhoto); 

并且还改变了这样的Layoutinflater,

convertView = inflater.inflate(R.layout.photodata,null,false);

此代码减少了错误

答案 1 :(得分:0)

您在此处粘贴的代码似乎存在问题。看到我假设的代码

  ViewHolder holder;

实际应该是

  ViewHolder myHolder;

在这种情况下,您已在if条件中使用new创建了实例,但在else中,未完成。因此,myHolder指向null。认为这是NullPointerException

的原因

答案 2 :(得分:0)

我的猜测没有行号和/或知道你传递给这个方法的内容...如果你试图用position == null调用这个方法那么它会抛出一个NPE,因为你将null传递给一个原语。