Как быстрее извлекать данные из firebase - PullRequest
3 голосов
/ 16 апреля 2020

Я создаю приложение и извлекаю данные для профиля, такие как имя, возраст, имя пользователя, dob и т. Д. c., Из базы данных Firebase. Но когда я открываю приложение и go на странице профиля, требуется 2-3 секунды, чтобы обновить sh текст и затем отобразить данные. Я хочу сделать этот процесс быстрее. Есть ли способ сделать это? И возможно ли хранить эти данные в локальном хранилище приложения, отображать их и обновлять эти сохраненные данные позже, используя inte rnet и данные из базы данных firebase? Тот же принцип я хотел применить к изображениям, которые загружаются из хранилища Firebase. Те занимают намного больше времени, чем данные. Примерно от 4 до 5 секунд.

Это то, что я сейчас использую:

mDatabase = FirebaseDatabase.getInstance().getReference().child(current_user);
        mDatabase.keepSynced(true);

   mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                String first = dataSnapshot.child("firstname").getValue().toString();
                String last = dataSnapshot.child("lastname").getValue().toString();
                String friend = dataSnapshot.child("friends").getValue().toString();
                String post = dataSnapshot.child("posts").getValue().toString();
                String user = dataSnapshot.child("username").getValue().toString();
                String db = dataSnapshot.child("age").getValue().toString();
                String ag = dataSnapshot.child("dob").getValue().toString();
                String bo = dataSnapshot.child("bio").getValue().toString();
                String rela = dataSnapshot.child("relationshipstatus").getValue().toString();    

                firstname.setText(first);
                lasttname.setText(last);
                username.setText(user);
                friends.setText("Friends:"+friend);
                posts.setText("Posts:"+post);
                dob.setText("DOB:"+db);
                age.setText("Age:"+ag);
                bio.setText(bo);
                relation.setText(rela);

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

1 Ответ

3 голосов
/ 16 апреля 2020

Каждый раз, когда вы сохраняете профиль пользователя в firebase, сначала сохраняйте его в локальном режиме, используйте общие предпочтения или комнату, в зависимости от того, что вам больше подходит, и после этого всякий раз, когда вы делаете какое-либо обновление, сначала делайте его в локальных данных, а затем синхронизируйте c его для хранения базы данных, таким образом, данные всегда будут с вами, пока пользователь не очистит их. Для этого всегда проверяйте, существуют ли локальные данные, если они не получают данные из хранилища Firebase, сохраните их в локальном хранилище. Точно так же используйте кеширование для хранения изображений локально, используйте glide или fresco для загрузки изображений, затем добавьте простой код для кеширования, чтобы до изменения URL-адреса изображения или удаления локальных данных вы всегда получали изображение очень быстро.

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