Firebase Firestore在应用启动时检索数据而不是保存它

时间:2017-10-17 15:14:03

标签: java android firebase google-cloud-firestore

我的Android应用程序出现问题,每次加载应用程序时都会从Firestore数据库中获取信息。在Firebase文档中,他们说默认情况下启用了持久性,但这对我来说似乎不起作用。试图添加设置但没有任何改变。

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
            .setPersistenceEnabled(true)
            .build();
    db.setFirestoreSettings(settings);

onCreate中的查询:

db.collection("administradores").whereEqualTo("email", user.getEmail()).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (DocumentSnapshot document : task.getResult()) {
                                tipo = (long) document.getData().get("tipo");
                                if (tipo == HomeFragment.EVENTO_CODE){
                                    menu.findItem(R.id.nav_nuevo).setTitle("Nuevo evento");
                                    menu.findItem(R.id.nav_editar).setTitle("Tus eventos");
                                    fragment.tipoEmpresa.setText("Administrador de eventos");
                                    fragment.tusEvLoc.setText("Tus eventos");
                                }else if(tipo == HomeFragment.COMERCIO_CODE){
                                    menu.findItem(R.id.nav_nuevo).setTitle("Nuevo local");
                                    menu.findItem(R.id.nav_editar).setTitle("Tus tiendas");
                                }else if(tipo == HomeFragment.BAR_CODE){
                                    menu.findItem(R.id.nav_nuevo).setTitle("Nuevo local");
                                    menu.findItem(R.id.nav_editar).setTitle("Tus establecimientos");
                                }
                            }
                        }
                    }
                });

我希望数据只保存(下载)一次,并在数据库发生变化时进行更新。可以使用Firestore工具,还是需要创建一个内部数据库(即SQLite)来保存所有数据?

1 个答案:

答案 0 :(得分:0)

使用它从缓存中获取数据。如果要手动保存数据,则需要将其存储在本地数据库中,并找到一种使数据在本地数据库中保持同步的方法。当添加或修改集合中的任何文档时,addSnapshotListener就会运行。

db.collection("cities").whereEqualTo("state", "CA")
    .addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot querySnapshot,
                            @Nullable FirebaseFirestoreException e) {
            if (e != null) {
                Log.w(TAG, "Listen error", e);
                return;
            }

            for (DocumentChange change : querySnapshot.getDocumentChanges()) {
                if (change.getType() == Type.ADDED) {
                    Log.d(TAG, "New city:" + change.getDocument().getData());
                }

                String source = querySnapshot.getMetadata().isFromCache() ?
                        "local cache" : "server";
                Log.d(TAG, "Data fetched from " + source);
            }

        }
    });