Как быстро загрузить данные в приложение, полученное из пожарного магазина? - PullRequest
0 голосов
/ 25 апреля 2020

Issue Я - ладья ie Android разработчик и учусь ежедневно И теперь у меня возникла проблема, которая беспокоит меня уже неделю.

В моем приложении я использую firebase firestore для загрузки данных ( в основном изображения и текстовые просмотры ). И это работает нормально, но теперь я обнаружил проблему в своем приложении, когда пользователь открывает приложение, когда данные, извлекаемые из магазина, появляются снова и снова, даже если данные совпадают. Это увеличивает мои операции чтения в firebase, также требуется время, чтобы загрузить данные в их поля. Итак, чтобы дать быстрый ответ пользователю, я хочу загрузить данные локально.

Итак, я хочу знать, как я могу это сделать. Как я могу сохранить данные из хранилища и загрузить их из локального хранилища, что делает их быстрыми и легкими.

Объяснение: Я попытался загрузить кэш, и он работал хорошо, но когда пользователь очищает данные приложения и снова открывает приложение тогда данные не загружаются с сервера, как это происходит раньше. Итак, есть ли способ проверить, не загружен ли кеш с сервера, загружен ли кеш из кеша.

Пример кода:

Source source = Source.CACHE;

    if (user != null){
        user_id = user.getUid();
        DocumentReference reference = FirebaseFirestore.getInstance().collection("Users").document(user_id);
        reference.get(source).addOnCompleteListener(task -> {
            if (task.isSuccessful()){
                DocumentSnapshot snapshot = task.getResult();
                if (snapshot != null) {
                    if (snapshot.exists()){
                        name = String.valueOf(snapshot.get("Name:"));
                        editName.setText(name);
                        email = String.valueOf(snapshot.get("Email:"));
                        editEmail.setText(email);
                        mobile = String.valueOf(snapshot.get("Phone:"));
                        editMobile.setText(mobile);
                        dob = String.valueOf(snapshot.get("Date of Birth:"));
                        editDOB.setText(dob);
                    }else {
                        editName.setText(user.getDisplayName());
                        editEmail.setText(user.getEmail());
                        editMobile.setText(user.getPhoneNumber());
                    }
                }
            }
        });

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

Итак, как я могу быстро загрузить данные.

1 Ответ

0 голосов
/ 25 апреля 2020

Вы можете использовать Параметры источника для чтения из локального кэша. По этой ссылке:

Для платформ с автономной поддержкой вы можете установить опцию source для управления тем, как при вызове get используется автономный кеш.

По умолчанию get call попытается получить последний снимок документа из вашей базы данных. На платформах с автономной поддержкой клиентская библиотека будет использовать автономный кеш, если сеть недоступна или время ожидания запроса истекло.

Вы можете указать параметр источника в вызове get(), чтобы изменить поведение по умолчанию. Вы можете извлечь только из базы данных и игнорировать автономный кеш, или вы можете извлечь только из автономного кеша. Например:


// Source can be CACHE, SERVER, or DEFAULT.
Source source = Source.CACHE;

// Get the document, forcing the SDK to use the offline cache
docRef.get(source).addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            // Document found in the offline cache
            DocumentSnapshot document = task.getResult();
            Log.d(TAG, "Cached document data: " + document.getData());
        } else {
            Log.d(TAG, "Cached get failed: ", task.getException());
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...