Список разбился, если я использую цикл - PullRequest
0 голосов
/ 11 марта 2020

Я должен опубликовать вопрос, потому что моя проблема не решена.

, если я использую al oop и перебираю список, который я создал, с помощью интерфейса (метод readData) программы cra sh Я проверил журнал и обнаружил, что он возвращает только первый элемент. с другой стороны, размер списка правильный

вот мой код Примечание Я использую Fragment

FirebaseFirestore mDB2;
private ArrayList<UserLocation> LocationsList = new ArrayList<>();
mDB2;= FirebaseFirestore.getInstance();

oncreateview

readData(new FirestoreCallBack() {
            @Override
            public void onCallBack(List<UserLocation> userLocations) {

                Log.d("test", userLocations.size() + " "); /// work
                Log.d("test", userLocations.get(4).getUser().getUser_id() + " "); //// work
                Log.d("test", userLocations.get(5).getUser().getUser_id() + " "); /////  work

                for (int i=0;i<userLocations.size();i++)
                {
                    Log.d("test",userLocations.get(i).getUser().getUser_id()); /// not working crash
                }

            }
        });

void readData(FirestoreCallBack firestoreCallBack)
    {

        CollectionReference c = mDB.collection("user_locations");
        c.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {

                for (DocumentSnapshot doc : task.getResult()) {
                    UserLocation updaed = doc.toObject(UserLocation.class);
                    LocationsList.add(updaed);



                }
                Log.d("size1", LocationsList.size() + " ");
                firestoreCallBack.onCallBack(LocationsList);

            }
        });

    }
interface FirestoreCallBack {
    void onCallBack(List<UserLocation> userLocations);
}

Примечание : Есть другой код, но он не мешает этой части кода

Структура моей базы данных https://imgur.com/a/nS3Ghdj

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Единственная возможная ошибка, которую я вижу, это что-то нулевое в вашем коде в этой строке:

Log.d("test",userLocations.get(i).getUser().getUser_id());

Я подозреваю, что get (i) ссылается на неопределенный объект (null), и вы затем пытаетесь "getUser ()", заставляющий программу бросать NPE. Кроме того, getUser () может возвращать значение NULL.

Если вы не укажете конкретное сообщение об ошибке c, вам очень трудно помочь.

А пока проверьте, какой вывод

Log.d("test",userLocations.get(i).getUser());

и

Log.d("test",userLocations.get(i));

result.

Укажите свои результаты в качестве правки и отметьте меня в комментариях, чтобы я получал уведомления.

1 голос
/ 11 марта 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...