Преобразование базы данных в реальном времени DatabaseReference.addListenerForSingleValueEvent в облако Firestore - PullRequest
0 голосов
/ 23 мая 2018

Я хотел бы преобразовать следующий код базы данных в реальном времени для использования Firebase:

private void setupFirebaseAuth(){
        Log.d(TAG, "setupFirebaseAuth: setting up firebase auth.");

        mAuth = FirebaseAuth.getInstance();
        mFirebaseDatabase = FirebaseDatabase.getInstance();
        myRef = mFirebaseDatabase.getReference();

        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();

                if (user != null) {
                    // User is signed in
                    Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());

                    myRef.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            //1st check: Make sure the username is not already in use
                            if(firebaseMethods.checkIfUsernameExists(username, dataSnapshot)){
                                append = myRef.push().getKey().substring(3,10);
                                Log.d(TAG, "onDataChange: username already exists. Appending random string to name: " + append);
                            }
                            username = username = append;

                            //add new user to the database

                            //add new user_account_settings to the database
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });

                } else {
                    // User is signed out
                    Log.d(TAG, "onAuthStateChanged:signed_out");
                }
                // ...
            }
        };
    }

, где переменные определены следующим образом:

//firebase
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private FirebaseMethods firebaseMethods;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference myRef;

Я могу использовать большинство из нихза исключением случаев, когда база данных определена как:

private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference myRef;

Это будет:

private FirebaseFirestore db;

Что будет соответствовать DatabaseReference для Firestore, потому что позже я не знаю, какадаптировать myRef.addListenerForSingleValueEvent к облачному хранилищу пожаров

1 Ответ

0 голосов
/ 23 мая 2018

Ближайший эквивалент addListenerForSingleValueEvent в Cloud Firestore - get().

Документация Firestore по получению данных содержит этот более полный пример:

DocumentReference docRef = db.collection("cities").document("SF");
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());
            } else {
                Log.d(TAG, "No such document");
            }
        } else {
            Log.d(TAG, "get failed with ", task.getException());
        }
    }
});

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

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