gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:49:31 26 4
gpt4 key购买 nike

将数据从一个类传递到另一个类时,我的应用程序不显示任何内容。我通过调试器发现我的 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;
}

}

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

最佳答案

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

Adaugare ad = new Adaugare();

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

但是由于您正在处理 Android,因此在 Activity 之间共享数据的正确方法是使用 Intent extra。第一个 Activity 通过 Intent 启动第二个 Activity 。第一个 Activity 将所需的数据作为附加数据放置在 Intent 中。第二个 Activity 使用 getIntent() 和 Intent 上的各种方法来访问额外内容。

最后一个提示,在 Android 中,您永远不会在 Activity 中使用 new 运算符。系统创建 Activity 来服务于 Intent 。如果您发现自己使用了 new 运算符,则表明您做错了什么。

关于java - 在两个类之间发送时丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54963390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com