Home > Enterprise >  How to resolve this onSuccesListener error?
How to resolve this onSuccesListener error?

Time:02-01

So in the following on Success Listener code:

database.collection("users")
            .add(users)
            .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot documentSnapshot) {
                    
                }
            })

I am getting the error:

'addOnSuccessListener(com.google.android.gms.tasks.OnSuccessListener<? super com.google.firebase.firestore.DocumentReference>)' in 'com.google.android.gms.tasks.Task' cannot be applied to '(anonymous com.google.android.gms.tasks.OnSuccessListener<com.google.firebase.firestore.DocumentSnapshot>)'

How to resolve this?

CodePudding user response:

It's as the stacktrace implies, you're using the wrong parameter in the listener. You need to use OnSuccessListener<DocumentReference> or any superclass of DocumentReference.

EDIT:

Reference from Firebase : Add a document

You need to use DocumentReference:

Map<String, Object> data = new HashMap<>();
data.put("name", "Tokyo");
data.put("country", "Japan");

db.collection("cities")
        .add(data)
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Log.d(TAG, "DocumentSnapshot written with ID: "   documentReference.getId());
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error adding document", e);
            }
        });

Use the resulting id to get the document again.

CodePudding user response:

Assuming that you have a database structure that looks like this:

Firestore-root
   |
   --- users (collection)
        |
        --- $uid (document)
             |
             --- // user fields.

To check if a particular users already exists, please use the following lines of cde:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference uidRef = db.collection("users").document(uid);
    uidRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document != null) {
                Log.d("TAG", "User already exists.");   
            } else {
                Log.d("TAG", "User doesn't exist.");
            }
        } else {
            Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
        }
    }
});
  •  Tags:  
  • Related