2015-04-21 4 views
2

Итак, я отлаживал свою программу и обнаружил, что часть моей программы обновляется, а другая нет.Связанный список не обновляет значения

У меня есть метод:

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.

Я проверил ссылки на объекты, чтобы убедиться, что они указывают на одну и ту же ссылку, и они есть.

Любая помощь была бы принята с благодарностью.

EDIT: Весь класс:

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 Класс: - смотри выше.

+0

Поскольку у вас есть отладчик, вы можете прикрепить точку останова, чтобы остановить выполнение каждый раз, когда происходит доступ к людям, доступным для доступа, и, следовательно, найти, если какая-либо другая операция опустошает список? Вы на 100% уверены, что люди должны быть одним и тем же объектом в обоих случаях? –

+0

100% - Я простаивал большую часть дня, и пока не повезло. :/ –

+0

Как насчет 'peopleAttending.clear()' где-то между двумя частями кода? –

ответ

1

Полезный совет: Это действительно популярным, чтобы установить тип списка в качестве интерфейса List<> из java.util пакета вместо LinkedList<> сам.

В любом случае, я уверен, что метод storeApplication не запускается автоматически, прежде чем метод onCreate запускается в рамках Activity framework. Возможно, ваш отладчик останавливается на нем в другом порядке (из-за использования потоков или smth), но вам нужно зарегистрировать некоторый вызов. Попробуйте это выяснить.

+0

storeApplication() запускается другим классом (который связан с XML, который я получаю для хранения данных из) –

+0

Можете ли вы как-то поделиться, как вы это настроили? –

+0

Я добавил код создания кода внизу. –

0

Я обнаружил, что проблема:

Когда я представить информацию бронирования, она выполняет все необходимые методы. Однако, когда метод «storeApplication()» завершил выполнение, ArrayList «опустошает» все объекты.

Я заметил это только тогда, когда использовал контрольную точку и дважды пытался использовать метод, во второй раз, когда я ввел данные о бронировании, ArrayList заявил, что он пуст.

Я собираюсь посмотреть, могу ли я попытаться сохранить ArrayList в более безопасном месте.

Смежные вопросы