2017-06-25 3 views
0

()オフラインモードがsetPersistenceEnabled(true)で有効になっているFirebaseDatabaseでデータを取り込む必要があります。 listViewは完全にオンラインモードに設定されていますが、オフラインモードの場合、listViewは、前にオンラインで同期されたlistViewのビューが存在するまで、入力されていません。私は(listViewにはビューはまだありません)オフラインモードでの最初のデータを追加するには、インストール後に非常に最初の時からオフラインモードでアプリケーションを使用する場合、私は意味オフラインのときにonDataChange()が呼び出されていません

は、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) { 

      } 
     }); 
    } 

答えて

2

。 Firebaseデータベースを使用してオフラインで作業するアプリケーションでは、そのアプリケーションをFirebaseに少なくとも1回接続する必要があります。あなたは、アプリケーションをダウンロードしたり、オフラインにしたり、データベースをオンラインで使ったりすることはできません。

これは、setPersistenceEnabled(true)が最初にFirebase接続を必要とするために起こります。 Firebaseにアプリケーションを接続してsetPersistenceEnabled(true)を使用すると、あなたのアプリはオフラインで動作するようになります。つまり、Firebaseは自身の内部(ローカル)バージョンのデータベースを作成します。

ローカルコピーを作成した後、データが更新されると、まずこのローカルバージョンのデータベースに書き込まれます。その結果、Firebaseへのすべての書き込みは、データがサーバに書き込まれる前にすぐにローカルイベントをトリガします。これは、インターネット接続に関係なく、アプリケーションが応答し続けることを意味します。 インターネット接続が再確立されると、適切な現在のサーバー状態が表示されます。 Firebaseクライアントは、そのデータをFirebaseサーバおよび同じデータベースを使用している他のクライアントと同期させます。

希望します。

+0

ありがとうございます。 –

+0

あなたはNishant Bhaktaを歓迎します!私の答えがあなたを助けたと思うなら、それを受け入れることを検討してください。ありがとう! –

+0

私に教えてください、どうすればこの問題を取り除くことができますか?なにか提案を。私はこれを残すことはできません。 –

0

コールitemReference.keepSynced(true)

+0

ありません..... –

関連する問題