链表不更新值
Linked List not updating values
所以我调试了我的程序,发现我程序的一部分正在更新,而另一部分没有。
我有一个方法:
public void storeApplication(String name, String item){
Application app = new Application(name, item);
peopleAttending.add(app);
}
调试器报告 LinkedList (peopleAttending) 中包含一个对象。
另一种方法:
public void populateListView() {
int noOfPeopleAttending = peopleAttending.size();
String noPeopleAttending = String.valueOf(noOfPeopleAttending);
Toast.makeText(GuestsAttending.this, noPeopleAttending, Toast.LENGTH_SHORT).show();
}
此方法可以在上一个方法之后调用,并声明 LinkedList 中没有对象。
我已经检查了对象引用,只是为了确保它们指向相同的引用并且确实如此。
如有任何帮助,我们将不胜感激。
编辑:整个Class:
public class GuestsAttending extends Activity {
private LinkedList<Application> peopleAttending = new LinkedList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guests_attending);
populateListView();
}
public void storeApplication(String name, String item){
Application app = new Application(name, item);
peopleAttending.add(app);
}
public void populateListView() {
// GuestsAdapter adapter = new GuestsAdapter(this, peopleAttending);
// ListView listView = (ListView) findViewById(R.id.listView);
// listView.setAdapter(adapter);
peopleAttending.size();
int noOfPeopleAttending = peopleAttending.size();
String noPeopleAttending = String.valueOf(noOfPeopleAttending);
Toast.makeText(GuestsAttending.this, noPeopleAttending, Toast.LENGTH_SHORT).show();
}
第二次编辑:
Java预约画面方法:
public void saveBookingInfo(View view) {
GuestsAttending sendApplication = new GuestsAttending();
EditText applicantNameText = (EditText) findViewById(R.id.applicantNameTextField);
EditText itemToBurnText = (EditText) findViewById(R.id.itemToBurnTextField);
String appName = applicantNameText.getText().toString();
String appItemToBurn = itemToBurnText.getText().toString();
if (appItemToBurn.isEmpty() || appName.isEmpty()) {
Toast.makeText(BookingScreen.this, "Please fill in all fields.", Toast.LENGTH_SHORT).show();
}
else {
sendApplication.storeApplication(appName, appItemToBurn);
}
}
出席嘉宾JavaClass:--见上文。
有用的提示:将 List 类型设置为 java.util
包中的 List<>
接口而不是 LinkedList<>
本身是非常流行的。
无论如何,我很确定 Activity 框架不会在 onCreate 方法 运行 之前自动触发 storeApplication
方法。也许你的调试器以不同的顺序停止在它上面(因为使用线程或 smth),但你应该记录一些调用。试着找出来。
我发现了问题所在:
当我提交预订信息时,它会运行所有必要的方法。但是,当"storeApplication()" 方法执行完后,ArrayList 'empties' 中的所有对象都出来了。
我只是在使用断点并尝试 运行 该方法两次时才注意到这一点,在我第二次输入预订详细信息时,ArrayList 显示它是空的。
我将看看是否可以尝试将 ArrayList 存储在更安全的地方。
所以我调试了我的程序,发现我程序的一部分正在更新,而另一部分没有。
我有一个方法:
public void storeApplication(String name, String item){
Application app = new Application(name, item);
peopleAttending.add(app);
}
调试器报告 LinkedList (peopleAttending) 中包含一个对象。
另一种方法:
public void populateListView() {
int noOfPeopleAttending = peopleAttending.size();
String noPeopleAttending = String.valueOf(noOfPeopleAttending);
Toast.makeText(GuestsAttending.this, noPeopleAttending, Toast.LENGTH_SHORT).show();
}
此方法可以在上一个方法之后调用,并声明 LinkedList 中没有对象。
我已经检查了对象引用,只是为了确保它们指向相同的引用并且确实如此。
如有任何帮助,我们将不胜感激。
编辑:整个Class:
public class GuestsAttending extends Activity {
private LinkedList<Application> peopleAttending = new LinkedList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guests_attending);
populateListView();
}
public void storeApplication(String name, String item){
Application app = new Application(name, item);
peopleAttending.add(app);
}
public void populateListView() {
// GuestsAdapter adapter = new GuestsAdapter(this, peopleAttending);
// ListView listView = (ListView) findViewById(R.id.listView);
// listView.setAdapter(adapter);
peopleAttending.size();
int noOfPeopleAttending = peopleAttending.size();
String noPeopleAttending = String.valueOf(noOfPeopleAttending);
Toast.makeText(GuestsAttending.this, noPeopleAttending, Toast.LENGTH_SHORT).show();
}
第二次编辑:
Java预约画面方法:
public void saveBookingInfo(View view) {
GuestsAttending sendApplication = new GuestsAttending();
EditText applicantNameText = (EditText) findViewById(R.id.applicantNameTextField);
EditText itemToBurnText = (EditText) findViewById(R.id.itemToBurnTextField);
String appName = applicantNameText.getText().toString();
String appItemToBurn = itemToBurnText.getText().toString();
if (appItemToBurn.isEmpty() || appName.isEmpty()) {
Toast.makeText(BookingScreen.this, "Please fill in all fields.", Toast.LENGTH_SHORT).show();
}
else {
sendApplication.storeApplication(appName, appItemToBurn);
}
}
出席嘉宾JavaClass:--见上文。
有用的提示:将 List 类型设置为 java.util
包中的 List<>
接口而不是 LinkedList<>
本身是非常流行的。
无论如何,我很确定 Activity 框架不会在 onCreate 方法 运行 之前自动触发 storeApplication
方法。也许你的调试器以不同的顺序停止在它上面(因为使用线程或 smth),但你应该记录一些调用。试着找出来。
我发现了问题所在:
当我提交预订信息时,它会运行所有必要的方法。但是,当"storeApplication()" 方法执行完后,ArrayList 'empties' 中的所有对象都出来了。
我只是在使用断点并尝试 运行 该方法两次时才注意到这一点,在我第二次输入预订详细信息时,ArrayList 显示它是空的。
我将看看是否可以尝试将 ArrayList 存储在更安全的地方。