Я пытаюсь взять данные из бэкэнда (я использую parse.com), поместить его в массив и использовать его для заполнения ListView через адаптер. Я анализирую несколько объектов в списке, а затем помещаю «имена» и «идентификаторы» в два отдельных массива строк.Данные массива исчезают - Android Studio
Теперь моя проблема в том, что данные исчезают, как только я добавляю следующую позицию в массив. Я потратил довольно много времени на то, чтобы понять это с помощью отладочных журналов, и кажется, что имена [0] отображаются в журнале правильно, когда они запрашиваются сразу после его записи. Если я попытаюсь получить доступ к именам [0] после записи имен [1], я получаю исключение нулевого указателя - println нуждается в сообщении, и приложение выйдет из строя. Когда вы не пытаетесь получить доступ к данным через журнал отладки, listview заполняется соответствующим количеством записей, но данные, которые должны были поступать от имен [] и идентификаторов [], пустые. Вот код, где все идет наперекосяк:
names = new String[2];
ids = new String[2];
ParseQuery<ParseObject> query = ParseQuery.getQuery("TestItem");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> objects, ParseException e) {
if (e == null) {
int size = objects.size();
int i = 0;
ParseObject obj;
while (i < size) {
obj = objects.get(i);
names[i] = obj.getString("name");
ids[i] = obj.getString("objectId");
i++;
}
/*The following code is fairly irrelevant(I think?) since the error appears
to be somewhere in the previous lines.*/
Bundle bundel = new Bundle();
bundel.putStringArray("names", names);
bundel.putStringArray("ids", ids);
ft = getSupportFragmentManager().beginTransaction();
screen = new Feed().newInstance(bundel);
ft.add(R.id.holder_frame, screen);
ft.commit();
} else {
}
}
});
Я чувствую, что это что-то основное об управлении массивами, но я не могу понять это. Пожалуйста, помогите :(
Я изучу его, но есть кое-что, что мне нужно указать здесь, я полагаю. Данные исчезают во время цикла «while» - имена [0] становятся пустыми после того, как были записаны имена [1]. Этот фрагмент кода использовался во фрагменте, в котором размещался ListView, но ошибка все еще была. Я отредактирую фрагмент кода, чтобы сделать его более понятным. – Creepling
Я не обращал на это большого внимания. Почему вы устанавливаете размер 2? Если вы получите результат более 2, вы легко получите '' '' ArrayOutOfBoundException''' –
Просто для тестирования, так как у меня есть ровно 2 записи в базе данных. Я все еще участвую, поэтому обеспечение того, что некоторые части кода не могут привести к ошибке в текущей конфигурации, очень помогает. – Creepling