Как использовать ссылки Firebase Cloud Firestore с чистым кодом? - PullRequest
0 голосов
/ 10 июня 2019

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

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

Я добавил этот код, надеюсь на ваш совет - как мне его почистить?

db.collection("users").document(mAuth.getUid())
                .get()
                .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                        if (task.isSuccessful()) {
                            DocumentSnapshot document = task.getResult();
                            if (document.exists()) {
                                ((DocumentReference)document.get("Users_Project")).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                                    @Override
                                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                        if (task.isSuccessful()) {
                                            DocumentSnapshot document = task.getResult();
                                            if (document.exists()) {
                                                ((DocumentReference) document.get("Project_Schedule")).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                                                    @Override
                                                    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                                                        if (task.isSuccessful()) {
                                                            DocumentSnapshot document = task.getResult();
                                                            if (document.exists()) {
                                                                //we got the data!!!!
                                                                Log.d(TAG, "DocumentSnapshot data: " + document.getData());
                                                            } else {
                                                                Log.d(TAG, "No such document as projectschedule ref");
                                                            }
                                                        } else {
                                                            Log.d(TAG, "get failed with ", task.getException());
                                                        }
                                                    }
                                                });
                                            } else {
                                                Log.d(TAG, "No such document as projectschedule");
                                            }
                                        } else {
                                            Log.d(TAG, "get failed with ", task.getException());
                                        }
                                    }
                                });
                            } else {
                                Log.d(TAG, "No such document as userproj");
                            }
                        } else {
                            Log.d(TAG, "get failed with ", task.getException());
                        }
                    }
                });

Заранее спасибо!

1 Ответ

2 голосов
/ 10 июня 2019

вы можете попробовать что-то вроде этого:

db.collection("users").document(mAuth.getUid())
        .get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                callback1(document);
            } else {
                Log.d(TAG, "No such document as userproj");
            }
        } else {
            Log.d(TAG, "get failed with ", task.getException());
        }
    }
});

    private void callback1(DocumentSnapshot document)
    {
        ((DocumentReference)document.get("Users_Project")).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    callback2();
                } else {
                    Log.d(TAG, "get failed with ", task.getException());
                }
            }
        });
    }

    private void callback2(DocumentSnapshot document)
    {
        DocumentSnapshot document = task.getResult();
        if (document.exists()) {
            ((DocumentReference) document.get("Project_Schedule")).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
                @Override
                public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                    if (task.isSuccessful()) {
                        callback3();
                    } else {
                        Log.d(TAG, "get failed with ", task.getException());
                    }
                }
            });
        } else {
            Log.d(TAG, "No such document as projectschedule");
        }
    }

    private void callback3(DocumentSnapshot document)
    {
        DocumentSnapshot document = task.getResult();
        if (document.exists()) {
            //we got the data!!!!
            Log.d(TAG, "DocumentSnapshot data: " + document.getData());
        } else {
            Log.d(TAG, "No such document as projectschedule ref");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...