Какой лучший способ справиться с тем, чтобы не загружать данные из Firebase каждый раз при загрузке фрагмента? - PullRequest
0 голосов
/ 01 сентября 2018

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

Я пытаюсь найти лучшие практики для загрузки информации профиля пользователя из Firebase при первой загрузке фрагмента, но при последующих загрузках не запрашивать Firebase и повторно загружать информацию (сохранение данных?). Сначала я думал об использовании saveSharedPreferences, но не уверен, что это правильный путь. Я думал, что смогу сохранить эту информацию в saveSharedPrefs, а также в Firebase, а затем запросить, если saveSharedPrefs null или нет. Но я также должен проверить изменения данных. Логично, что если бы пользователь обновил свой профиль, я бы обновил saveSharedPrefs, а также Firebase, поэтому потребуется только проверка на нулевое значение. Я смотрю на хранение имени пользователя, фотографии, электронной почты, биографии, интересов, города, веб-сайта и, возможно, еще 1 или 2 элементов, чтобы не было много хранимых локальных данных. Кроме того, я буду хранить только конфиденциальную информацию.

Это лучший и самый эффективный способ обработки данных? Есть ли другой метод, о котором я не думаю? Я также хотел бы применить это к другим частям приложения так, чтобы, если данные из Firebase не отличались от локальных данных, не перезагружались из Firebase, получали данные из saveSharedPrefs.

Пожалуйста, помогите с предложениями. Кроме того, я еще не очень много сделал с saveSharedPrefs, поэтому я все еще учусь тому, как это делать. Спасибо!

***** ****** Update 1010 *

Получить фото с Firebase:

Вот мой код для загрузки информации профиля пользователя (только имя и фотография):

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)

            doAsync {
                //get user profile information
                if (user != null) {
                    uiThread {
                        //update UI thread after completing task
                        view.profileUsername.setText(user?.displayName)
                        view.profileProgressBar.visibility = View.GONE
                        if (user?.photoUrl != null) {
                            view.profileUserPhoto.setImageURI(user?.photoUrl)

                        }
                    }
                }
            }
        }

установите onClickListener для floatingActionButton и вызовите метод chooseProfileImage для получения изображения из локального хранилища:

view.fab_profile_photo_edit.setOnClickListener {

            chooseProfileImage()

        }

 private fun chooseProfileImage() {
        val intent = Intent()
        intent.type = "image/*"
        intent.action = Intent.ACTION_GET_CONTENT
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), profileImageRequest)
    }

Все эти действия выполняются внутри фрагмента, просто к сведению.

1 Ответ

0 голосов
/ 01 сентября 2018

Если вы хотите, чтобы ваши данные всегда обновлялись, вы должны загружать данные каждый раз, когда перезагружаете фрагмент, но вы думаете, что пользователю это неудобно, это нормально. Я буду использовать SQlite в Android, загружать данные и сохранять их в базе данных в первый раз. Когда я нажимаю на фрагмент, я загружаю данные из базы данных, чтобы убедиться, что быстрые и всегда доступные данные для пользователя могут быть прочитаны, и также загружаю данные из firebase, я проверяю, когда загрузка выполнена, и обновляю данные до sqlite и reaload для просмотра,

Это может быть так:

private loadDataFromFirebase(){
// Here load data from firebase, when load done, call bindaDataForView(data)

}

private bindDataForView(Data data){


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