(抱歉我的英语不好)listView
需要填充FirebaseDatabase
,setPersistenceEnabled(true)
已启用listView
启用离线模式。 listView
在联机模式下完美填充,但在离线模式下listView
不会填充,直到listView
中有一个已在线同步的视图。
我的意思是,如果我在安装后第一次在离线模式下使用应用程序,以便在离线模式下添加第一个数据(offline cache
中还没有视图),onDataChange
正在编写但是listView
未被解雇,之后如果应用程序上线,listView
会自动填充我之前在离线模式下输入的数据,之后private void getAndSetItem(){
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference itemReference = firebaseDatabase.getReference().child("groups").child(intent.getStringExtra("groupID"))
.child("items").child(hiddenUserID);
itemReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ArrayList<Item> itemsArray = new ArrayList<Item>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
itemsArray.add(snapshot.getValue(Item.class));
}
ItemExtractor itemExtractor = new ItemExtractor(itemsArray);
CustomAdapterForItemList adapter = new CustomAdapterForItemList(ItemPage.this, itemExtractor.getItemNameList(),
itemExtractor.getItemPriceList(), itemExtractor.getItemQuantity(), itemExtractor.getDate());
listView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
即使在离线状态下工作正常模式也是。
代码是:
C:\PythonXY
答案 0 :(得分:3)
您无法更改此行为。对于使用Firebase数据库脱机工作的应用程序,您需要至少将该应用程序连接到Firebase一次。您无法下载应用程序,离线并在线时使用数据库。
这种情况正在发生,因为setPersistenceEnabled(true)
首先需要Firebase连接。因此,将您的应用与Firebase连接并使用setPersistenceEnabled(true)
可让您的应用离线工作,这意味着Firebase将创建自己的内部(本地)版数据库。
创建本地副本后,更新数据时,首先将其写入此本地版本的数据库。因此,在将任何数据写入服务器之前,对Firebase的所有写入都将立即触发本地事件。这意味着无论互联网连接如何,应用都将保持响应。 重新建立Internet连接后,您将收到适当的当前服务器状态。 Firebase客户端将该数据与Firebase服务器以及使用同一数据库的其他客户端同步。
希望它有所帮助。
答案 1 :(得分:0)
致电itemReference.keepSynced(true)