空指针Exc:尝试在空对象引用上调用虚拟方法'boolean java.util.ArrayList.add(java.lang.Object)'

时间:2019-06-26 18:51:19

标签: java android nullpointerexception

我有MainActivity: 公共类MainActivity扩展了活动{

private ArrayList<Antrenament> listaAntr = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Antrenament a1 = new Antrenament("forta","12/06/2019",50,"Andrei");
    listaAntr.add(a1);

    Button bAdd = (Button) findViewById(R.id.buttonAdd);
    Button bLista = (Button) findViewById(R.id.buttonList);


    bAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), AdaugareAntrenament.class);
            intent.putParcelableArrayListExtra("listaant",listaAntr);
            startActivityForResult(intent,1);

        }
    });


    bLista.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), ListaAntr.class);
            intent.putParcelableArrayListExtra("listaant",listaAntr);
            startActivityForResult(intent,1);
        }
    });


    Intent intent2 = getIntent();
    listaAntr = intent2.getParcelableArrayListExtra("listaantr");


}

}

我想要将对象Antrenament名称列表listaAntr的列表发送到AdaugareAntrenament活动,在这里我想创建一个新的Antrenament对象,将其添加到列表中,然后将列表发送回mainactivity。我想将这个更新后的列表从mainactivity发送到ListaAntr Activity。

AdaugareAntrenament活动:

公共类AdaugareAntrenament扩展了活动{

 ArrayList<Antrenament> listaAntr1=new ArrayList<>();
//private Button add;
 EditText etcateg, etdurata, etinstr,etdata;
List<String> listacateg=new ArrayList<>();
Spinner spinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_adaugare_antrenament);

    Intent intent = getIntent();
   listaAntr1 = intent.getParcelableArrayListExtra("listaant");

    Button add = findViewById(R.id.buttonSave);
    etdurata=findViewById(R.id.editTextDurata);
    etinstr=findViewById(R.id.editTextInstructor);
    etdata=findViewById(R.id.editTextData);
    spinner=findViewById(R.id.spinner);

    listacateg=new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.categ)));

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,listacateg);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String categorie,instructor,data;
            int durata;

            durata = Integer.parseInt(etdurata.getText().toString());
            instructor = etinstr.getText().toString().trim();
            data = etdata.getText().toString().trim();
            categorie = spinner.getSelectedItem().toString().trim();



            if(TextUtils.isEmpty(instructor)) {
                etinstr.setError("Introduceti numele instructorului");
                return;
            }

            if(TextUtils.isEmpty(data)) {
                etdata.setError("Introduceti data programarii");
                return;
            }

                Antrenament antr = new Antrenament(categorie, data, durata, instructor);
                listaAntr1.add(antr);
                Intent intent=new Intent(getApplicationContext(), MainActivity.class);
                intent.putParcelableArrayListExtra("listaantr",listaAntr1);

        }
    });

}

目前,当我尝试创建Antrenament对象时遇到该错误。但这是经过一些更改的原因,因为我的代码甚至没有将更新后的列表发送回主要活动。

当前错误:

 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
        at com.example.ancaa.rezolvarerestanta20181.AdaugareAntrenament$1.onClick(AdaugareAntrenament.java:78)

错误指向该行:

  listaAntr1.add(antr);

和ListaAntr活动:

公共类ListaAntr扩展了活动{

public ArrayList<Antrenament> listaAntr = new ArrayList<>();
public ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista_antr);

    lv = (ListView)findViewById(R.id.lista);

    Intent intent = getIntent();
    listaAntr = intent.getParcelableArrayListExtra("listaantr");

    ArrayAdapter<Antrenament> adapter=new ArrayAdapter<Antrenament>(this,android.R.layout.simple_list_item_1,listaAntr);
    lv.setAdapter(adapter);

}

}

在此,arraylist的内容应显示为列表视图。

1 个答案:

答案 0 :(得分:0)

getParcelableArrayListExtra(String);找不到意图中的数组并返回null。查看documentation for the function

从那里看起来您在MainActivity.java中做错了什么。您正在使用此行listaAntr覆盖oncreatelistaAntr = intent2.getParcelableArrayListExtra("listaantr");$('#productsForm').on('reset', function () { $("input[type='hidden']", $(this)).val(''); }); 中的信息,然后在单击时将新清空的Array传递给下一个Activity,从而引起问题。