DocumentSnapshot всегда имеет значение null для действительной ссылки на документ - PullRequest
0 голосов
/ 04 декабря 2018

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

Вот структура в Firestore:

enter image description here

В общем, у меня есть следующий путь:

collection(Users).document(23).collection(orders).document(16)
or
/Users/23/orders/21

.. и я хочу получить данные документа 16 из коллекции «заказов».


Вот код

  class FireStoreMapActivity{
  DocumentReference  doc;


    void getData(){

    doc = FirebaseFirestore.getInstance()
                    .collection("Users")
                    .document(23 + "")
                    .collection("orders")
                    .document(21 + "");

     doc.addSnapshotListener(this, (documentSnapshot, e) -> {

                if (documentSnapshot != null) {
                    if (documentSnapshot.exists()) {
                        List<String> images = (List<String>) documentSnapshot.get("images");
                        Log.e(">>>>>>>>>>> size => ", locHistory.size() + " ");

                    } else {
                        Log.e(">>>>>>>> error ", " documentSnapshot != exists");
                    }
                } else {
                    Log.e(">>>>>>>> error ", " documentSnapshot = null");
                }
            });
  }
}

Но каждый раз, нулевой журнал появляется Log.e(">>>>>>>> error ", " documentSnapshot = null");

ОБНОВЛЕНИЕ

хорошо, после печати исключения это кажется ошибкой разрешения!

com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: Missing or insufficient permissions.

Вот мой набор правил

service cloud.firestore {
  match /databases/{database}/documents {
    match /Users/{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

, но как сообщить Firestore, что я на самом деле аутентифицированный пользователь.!?

1 Ответ

0 голосов
/ 04 декабря 2018

Если documentSnapshot равно null и вы уверены, что документ существует, тогда значение e будет иметь значение.Распечатайте его, чтобы увидеть, в чем заключается проблема, которая обычно связана с разрешениями.


Из вашего обновления кажется, что ваши правила требуют только аутентифицированного пользователя, но ваш слушатель отклоняется сервером на основе этихправила.Это означает, что вы не вошли в систему или, по крайней мере, не вошли в систему при попытке чтения из Firestore.

Учитывая, что код, которым вы поделились, ничего не говорит об аутентификации, трудно сказать больше.Однако, если вы хотите проверить, зарегистрируйте текущего пользователя непосредственно перед тем, как вы позвоните addSnapshotListener, например Log.i("User", FirebaseAuth.getInstance().getCurrentUser()).

...