Java Android ListView适配器返回NullPointerException

Java Android ListView适配器返回NullPointerException,java,android,listview,Java,Android,Listview,当尝试将图像填充到holder的ImageView中时,或者当我尝试将onclick侦听器设置为holder ImageView时,应用程序崩溃。如果我尝试执行与持有者的imageview相关的任何操作,它实际上会崩溃 图像URL不是空的,我检查过了 ImageView存在,我检查过了 适配器代码(它的重要部分): public class FeedAdapter extends BaseAdapter { static private Activity activity;

当尝试将图像填充到holder的ImageView中时,或者当我尝试将onclick侦听器设置为holder ImageView时,应用程序崩溃。如果我尝试执行与持有者的imageview相关的任何操作,它实际上会崩溃

图像URL不是空的,我检查过了

ImageView存在,我检查过了

适配器代码(它的重要部分):

 public class FeedAdapter extends BaseAdapter {
    
    static private Activity activity;
    private static LayoutInflater inflater = null;
    ArrayList<ActivityTable> actList = new ArrayList<ActivityTable>();
    Holder holder;
    
    public FeedAdapter(Activity a, ArrayList<ActivityTable> actList) {
            activity = a;
            inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            this.actList = actList;
    }
    
    public View getView(int position, View convertView, ViewGroup parent) {
    
            View vi = convertView;
            final ActivityTable act = actList.get(position);
    
            if (vi == null) {
                  vi = inflater.inflate(R.layout.feed_single_picture, parent, false);
                  holder = new Holder();
                  holder.media = (ImageView) vi.findViewById(R.id.postphoto);
                  //can't set an image to it either. it crashes.
            }
            else {
                  holder = (Holder) vi.getTag();
            }
            
            //This is where it crashes
            holder.media.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                        
                              //other on Click related Code
                        
                        }
            });
       return vi;
    }

    public static class Holder {
            ImageView media;
    }
}

上面的行:456指向->holder.media.setOnClickListener(新视图.OnClickListener(){

您应该修改代码如下:

if (vi == null) {
    vi = inflater.inflate(R.layout.feed_single_picture, parent, false);
    holder = new Holder();
    holder.media = (ImageView) vi.findViewById(R.id.postphoto);
}
并从if-else的外部代码中删除它们。修复如下:

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    final ActivityTable act = actList.get(position);

    if (vi == null) {
        vi = inflater.inflate(R.layout.feed_single_picture, parent, false);
        holder = new Holder();
        vi.setTag(holder);
    }else {
        holder = (Holder) vi.getTag();
    }

    holder.media.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
       }
    });
    return vi;
}

static class Holder {

    private ImageView media;

    Holder(View view){
        this.media = (ImageView) view.findViewById(R.id.postphoto);
    }

}

当然可以。请稍等@ρцσѕρєKIf可能的话也请分享
feed_single_picture.xml
file code对不起,我检查了我的错误,代码与你给我的格式相同。编辑了问题你添加了vi.setTag(holder)了吗;在if block中?你能用feed_single_picture.xml文件发布适配器的全部代码吗?@Earthling你应该在holder类中绑定视图和布局,而不是在getView方法中。我不知道:O@adnbsr所以findViewBy…部分都在holder类中?设置URL和所有代码怎么样?我应该把它们放在哪里?在if/else blo之后您将拥有所有已定义的视图,并且可以在其中进行设置。注意:使用毕加索或Glide
public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    final ActivityTable act = actList.get(position);

    if (vi == null) {
        vi = inflater.inflate(R.layout.feed_single_picture, parent, false);
        holder = new Holder();
        vi.setTag(holder);
    }else {
        holder = (Holder) vi.getTag();
    }

    holder.media.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
       }
    });
    return vi;
}

static class Holder {

    private ImageView media;

    Holder(View view){
        this.media = (ImageView) view.findViewById(R.id.postphoto);
    }

}