在android中离线时没有调用onDataChange()

时间:2017-06-25 19:11:11

标签: android firebase firebase-realtime-database

(抱歉我的英语不好)listView需要填充FirebaseDatabasesetPersistenceEnabled(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

2 个答案:

答案 0 :(得分:3)

您无法更改此行为。对于使用Firebase数据库脱机工作的应用程序,您需要至少将该应用程序连接到Firebase一次。您无法下载应用程序,离线并在线时使用数据库。

这种情况正在发生,因为setPersistenceEnabled(true)首先需要Firebase连接。因此,将您的应用与Firebase连接并使用setPersistenceEnabled(true)可让您的应用离线工作,这意味着Firebase将创建自己的内部(本地)版数据库。

创建本地副本后,更新数据时,首先将其写入此本地版本的数据库。因此,在将任何数据写入服务器之前,对Firebase的所有写入都将立即触发本地事件。这意味着无论互联网连接如何,应用都将保持响应。 重新建立Internet连接后,您将收到适当的当前服务器状态。 Firebase客户端将该数据与Firebase服务器以及使用同一数据库的其他客户端同步。

希望它有所帮助。

答案 1 :(得分:0)

致电itemReference.keepSynced(true)