我的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)来保存所有数据?
答案 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);
}
}
});