链接列表不更新值

时间:2015-04-21 16:16:03

标签: java android object linked-list

所以我调试了我的程序,发现我的程序部分正在更新,而另一部分则没有。

我有一个方法:

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中没有对象。

我已经检查了对象引用,只是为了确保它们指向相同的引用,并且它们是。

非常感谢任何帮助。

编辑:整个班级:

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);
    }
}

GuestsAttending Java Class: - 见上文。

2 个答案:

答案 0 :(得分:1)

有用的提示:将List的类型设置为List<>包而不是java.util本身的LinkedList<>界面非常受欢迎。< / p>

无论如何,我非常确定在Activity框架运行onCreate方法之前不会自动触发storeApplication方法。也许你的调试器以不同的顺序停止它(因为使用线程或smth),但你应该记录一些调用。试着找出来。

答案 1 :(得分:0)

我发现了问题所在:

当我提交预订信息时,它会运行所有必要的方法。但是,当&#34; storeApplication()&#34;方法已经完成执行,ArrayList&#39;清空&#39;所有的对象都出来了。

当我使用断点并尝试运行该方法两次时,我才注意到这一点,第二次输入预订详细信息时,ArrayList声明它是空的。

我要看看我是否可以尝试将ArrayList存储在一个更安全的地方。