Firestore get DocumentSnapshot's field's value

后端 未结 5 578
盖世英雄少女心
盖世英雄少女心 2021-02-02 09:10

If I have a Firebase Firestore database which I have retrieved a DocumentSnapshot for the document corresponding to the collection on the right and stored in a

相关标签:
5条回答
  • 2021-02-02 09:47

    you can use get method to get value of a field

    String username = (String) document.get("username");  //if the field is String
    Boolean b = (Boolean) document.get("isPublic");       //if the field is Boolean
    Integer i = (Integer) document.get("age")             //if the field is Integer
    

    checkout the doc for DocumentSnapshot

    0 讨论(0)
  • 2021-02-02 09:47

    Here is another simple way to get document value(in your case):

    Firestore.instance
    .collection('users').document('xsajAansjdna')
    .get()
    .then((value) =>
    print("Fetched ==>>>"+value.data["username"]));
    
    0 讨论(0)
  • 2021-02-02 09:51

    You need to do a DocumentReference to get the content in your document.

    A simple one will be like this.

    DocumentReference docRef = myDB.collection("users").document("username");
    docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
         public void onComplete(@NonNull Task<DocumentSnapshot> task) {
              if (task.isSuccessful()) {
                   DocumentSnapshot document = task.getResult();
                        if (document != null) {
                             Log.i("LOGGER","First "+document.getString("first"));
                             Log.i("LOGGER","Last "+document.getString("last"));
                             Log.i("LOGGER","Born "+document.getString("born"));
                        } else {
                             Log.d("LOGGER", "No such document");
                        }
                   } else {
                        Log.d("LOGGER", "get failed with ", task.getException());
                    }
              }
         });
    

    The downside is that you need to know your document ID to get the field values.

    0 讨论(0)
  • 2021-02-02 10:01

    I can only reference the field's data as Strings when I am inside the onComplete, but when I try reference it outside it. I get a nullPointerException and it crashes my activity.

    // Gets user document from Firestore as reference
        DocumentReference docRef = mFirestore.collection("users").document(userID);
    
        docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
    
                        Log.d(TAG, "DocumentSnapshot data: " + document.getData());
                        Log.d(TAG, "db firstName getString() is: " + document.getString("firstName"));
                        Log.d(TAG, "db lastName getString() is: " + document.getString("lastName"));
    
                        mFirstName = (String) document.getString("firstName");
                        mLastName = (String) document.getString("lastName");
                        Log.d(TAG, "String mFirstName is: " + mFirstName);
                        Log.d(TAG, "String mLastName is: " + mLastName);
    
                    } else {
                        Log.d(TAG, "No such document");
                    }
                } else {
                    Log.d(TAG, "get failed with ", task.getException());
                }
            }
        });
    
        //string checking outside the docRef.get().addOnCompleteListener code
        //commented it out because it causes a java.lang.NullPointerException: println needs a message
        //Log.v("NAME", mFirstName);
        //Log.v("NAME", mLastName);
    
        // sets the text on the TextViews
        tvFirstName = (TextView)findViewById(R.id.tvFirstName);
        tvFirstName.setText(mFirstName);
        tvLastName = (TextView)findViewById(R.id.tvLastName);
        tvLastName.setText(mLastName);
    
    0 讨论(0)
  • 2021-02-02 10:12

    DocumentSnapshot has a method getString() which takes the name of a field and returns its value as a String.

    String value = document.getString("username");
    
    0 讨论(0)
提交回复
热议问题