Java Android-适配器NullPointerException

Java Android-适配器NullPointerException,java,android,android-studio,adapter,Java,Android,Android Studio,Adapter,如果这是重复的,我提前道歉。我对安卓系统的开发还很陌生,并试图寻找一个解决方案,但找不到一个可行的 我正在创建一个待办应用程序,并在适配器中收到此错误 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String assignment.Model.getAssignment()' on a null object reference at assignment.Adapter.getView(

如果这是重复的,我提前道歉。我对安卓系统的开发还很陌生,并试图寻找一个解决方案,但找不到一个可行的

我正在创建一个待办应用程序,并在适配器中收到此错误

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String assignment.Model.getAssignment()' on a null object reference
at assignment.Adapter.getView(Adapter.java:39)    
它引用的代码行是

assignment.setText(modelItems[position].getAssignment());
我相信我设置的位置是导致错误的原因,但我不确定如何修复它

以下是我代码的其余部分供参考:

Java-onActivityResult

   @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    String assignmentSentBack = data.getStringExtra("editAssignment");
    Integer monthSentBack = data.getIntExtra("month", 0);
    Integer daySentBack = data.getIntExtra("day", 0);

    modelItems = new Model[100];
    ArrayList<Model> modelArrayList = new ArrayList<>(Arrays.asList(modelItems));
    modelArrayList.add(new Model(assignmentSentBack, (monthSentBack + 1) + "/" + daySentBack, 0));
    lv = (ListView) findViewById(R.id.listAssignment);
    ListAdapter adapter = new Adapter(this, modelItems);
    lv.setAdapter(adapter);
}
适配器

public class Adapter extends ArrayAdapter {

Model[] modelItems = null;
Context context;

public Adapter(Context context, Model[] resource) {
    super(context, R.layout.row, resource);
    this.context = context;
    this.modelItems = resource;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        convertView = inflater.inflate(R.layout.row, parent, false);
        TextView assignment = (TextView) convertView.findViewById(R.id.assignment);
        TextView dueDate = (TextView) convertView.findViewById(R.id.dueDate);
        CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox);
        assignment.setText(modelItems[position].getAssignment());
        dueDate.setText(modelItems[position].getDueDate());
        if (modelItems[position].getValue() == 1)
            cb.setChecked(true);
        else
            cb.setChecked(false);

        return convertView;
    }
}
模型

感谢您的帮助。谢谢。

换衣服

public class Adapter extends ArrayAdapter {

公共类适配器扩展了ArrayAdapter{
更改

public class Adapter extends ArrayAdapter {

公共类适配器扩展了ArrayAdapter{

您已在此处创建了大小为100的模型阵列:

modelItems = new Model[100];
因此,正在创建100个模型,但所有100个索引都具有
null

然后使用该数组创建了
ArrayList

ArrayList<Model> modelArrayList = new ArrayList<>(Arrays.asList(modelItems));
类似地,添加更多这样的模型对象。 在适配器的构造函数中传递此
modelArrayList
,并使用此(而不是数组)显示列表

lv = (ListView) findViewById(R.id.listAssignment);
ListAdapter adapter = new Adapter(this, modelArrayList)
因此,您的适配器如下所示:

ArrayList<Model> modelArrayList = new ArrayList<>();
modelArrayList.add(new Model(assignmentSentBack, (monthSentBack + 1) + "/" + daySentBack, 0));
ArrayList<Model> modelArrayList;
Context context;

public Adapter(Context context, ArrayList<Model> resource) {
    super(context, R.layout.row, resource);
    this.context = context;
    this.modelArrayList = resource;
}
ArrayList模型ArrayList;
语境;
公共适配器(上下文、ArrayList资源){
super(上下文、R.layout.row、资源);
this.context=上下文;
this.modelArrayList=资源;
}

您已在此处创建了大小为100的模型阵列:

modelItems = new Model[100];
因此,正在创建100个模型,但所有100个索引都具有
null

然后使用该数组创建了
ArrayList

ArrayList<Model> modelArrayList = new ArrayList<>(Arrays.asList(modelItems));
类似地,添加更多这样的模型对象。 在适配器的构造函数中传递此
modelArrayList
,并使用此(而不是数组)显示列表

lv = (ListView) findViewById(R.id.listAssignment);
ListAdapter adapter = new Adapter(this, modelArrayList)
因此,您的适配器如下所示:

ArrayList<Model> modelArrayList = new ArrayList<>();
modelArrayList.add(new Model(assignmentSentBack, (monthSentBack + 1) + "/" + daySentBack, 0));
ArrayList<Model> modelArrayList;
Context context;

public Adapter(Context context, ArrayList<Model> resource) {
    super(context, R.layout.row, resource);
    this.context = context;
    this.modelArrayList = resource;
}
ArrayList模型ArrayList;
语境;
公共适配器(上下文、ArrayList资源){
super(上下文、R.layout.row、资源);
this.context=上下文;
this.modelArrayList=资源;
}

您应该尝试将其包装在内部Holder类中,并在该类中定义参数

public class Adapter extends ArrayAdapter {

Model[] modelItems = null;
Context context;

public Adapter(Context context, Model[] resource) {
    super(context, R.layout.row, resource);
    this.context = context;
    this.modelItems = resource;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        if (convertView == null) {
            holder = new ViewHolder();

            convertView = vi.inflate(R.layout.list_layout, null);

            // Find the child views.
            holder.assignment= (TextView) convertView.findViewById(R.id.txt_name);
            holder.dueDate= (Button) convertView.findViewById(R.id.btn_invite);
            holder.cb= (Button) convertView.findViewById(R.id.btn_track);
            convertView.setTag(holder);

//....

        }
        // Reuse existing row view
        else {
            holder = (ViewHolder)convertView.getTag();

        }

        return convertView;
    }
 class ViewHolder {

        TextView assignment;
TextView dueDate;
CheckBox cb;

    }
}

您应该尝试将其包装在一个内部Holder类中,并在该类中定义参数

public class Adapter extends ArrayAdapter {

Model[] modelItems = null;
Context context;

public Adapter(Context context, Model[] resource) {
    super(context, R.layout.row, resource);
    this.context = context;
    this.modelItems = resource;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        if (convertView == null) {
            holder = new ViewHolder();

            convertView = vi.inflate(R.layout.list_layout, null);

            // Find the child views.
            holder.assignment= (TextView) convertView.findViewById(R.id.txt_name);
            holder.dueDate= (Button) convertView.findViewById(R.id.btn_invite);
            holder.cb= (Button) convertView.findViewById(R.id.btn_track);
            convertView.setTag(holder);

//....

        }
        // Reuse existing row view
        else {
            holder = (ViewHolder)convertView.getTag();

        }

        return convertView;
    }
 class ViewHolder {

        TextView assignment;
TextView dueDate;
CheckBox cb;

    }
}

这是因为您的
modelItems
刚刚声明,您没有给它们分配任何值。这是因为您的
modelItems
刚刚声明,您没有给它们分配任何值。