在两个类之间发送时丢失数据

时间:2019-03-02 21:54:37

标签: java android function oop arraylist

将数据从一类传递到另一类时,我的应用程序不显示任何内容。通过调试器,我发现ArrayList没有从类中获取正确的值。 我正在使用以下功能发送数据:

public class Adaugare extends AppCompatActivity {

private ListView myListView;
private NumeAdapter numeAdapter;
String inume;
int ivarsta;
Intent intent = new Intent();
private ArrayList persoanaArrayList = new ArrayList<>();

public ArrayList getPersoanaArrayList() {
    return persoanaArrayList;
}

public int getPersoanaArrayListsize() {
    return persoanaArrayList.size();
}

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

    myListView = (ListView) findViewById(R.id.persoana_list);

    Button btn_fin = (Button) findViewById(R.id.btn_fin);
    btn_fin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText nume_edit_text = (EditText) findViewById(R.id.ins_nume);
            EditText varsta_edit_text = (EditText) findViewById(R.id.ins_var);

            ivarsta = Integer.parseInt(varsta_edit_text.getText().toString());
            inume = nume_edit_text.getText().toString();

            persoanaArrayList.add(new Persoana(inume, ivarsta));
        }
    });
}

}

并通过以下方式接收它:

public class Afisare extends AppCompatActivity {

ListView myListView;
NumeAdapter numeAdapter;
Adaugare ad = new Adaugare();
int cate;
int i;

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

    myListView = (ListView) findViewById(R.id.persoana_list);
    ArrayList<Persoana> persoanaArrayList = new ArrayList<Persoana>(ad.getPersoanaArrayList());
    numeAdapter = new NumeAdapter(this, persoanaArrayList);
    myListView.setAdapter(numeAdapter);
}

Persoana类是:

public class Persoana {
private String nume;
private int varsta;

Persoana(String inume, int ivar) {
    this.nume = inume;
    this.varsta = ivar;
}

public String getNume() {
    return nume;
}

public int getVarsta() {
    return varsta;
}

public void setNume(String nume) {
    this.nume = nume;
}

public void setVarsta(int varsta) {
    this.varsta = varsta;
}

}

Persoana 是主要类,所有内容都保存在其中。 ad Adaugare 的对象, Adaugare 是我从中获取 getPersoanaArrayList 代码的类。在调试时,一些值出现在 ad 上,即 Adaugare @ 4556 ,而 persoanaArrayList 仍然为 null 。 我需要 persoanaArrayList ,以便可以初始化我的适配器和listView。通过调试器进行逐步测试,代码中的所有其他内容似乎都很好。

1 个答案:

答案 0 :(得分:0)

您的问题在于Afisare类中的以下行:

Adaugare ad = new Adaugare();

您不能简单地从另一个活动中新建一个活动并期望访问它们之间的共享列表。要在Java对象之间共享实例数据,您需要引用另一个对象。创建一个新实例将创建一个新的空列表。这就是为什么您在“丢失”数据。一种快速的解决方案是使列表静态,以便可以从任何实例访问它。

但是,由于您使用的是Android,因此在活动之间共享数据的正确方法是使用Intent Extras。第一个活动通过意图开始第二个活动。第一个活动将期望的数据作为额外内容放置在意图中。第二个活动使用getIntent()和Intent上的各种方法来访问额外内容。

最后一个技巧是,在Android中,您永远不要将新运算符与“活动”结合使用。系统创建活动以服务于意图。如果您发现自己使用了new运算符,则表明您做错了事。