2017-12-01 6 views
0

Firebaseを単純なデータ構造で使用すると、ユニークな鍵を含むデータを読み込む方法がありません。私のデータを単純に構成されているユニークな鍵でFirebaseデータをAndroidで処理する

myRef.child("users").child(userID).child("favorites").child(key).setValue(newSite); 

Users 
- UserID 
    - Favorites 
    - KEY : VALUE 

私は次のように私のデータを見ることができていて

String key = myRef.child("users").push().getKey();

と私のデータを追加するには、正常に動作します:キーを使用して生成されますso showData(dataSnapshot):

for(DataSnapshot ds : dataSnapshot.getChildren()){ 
    String data = ds.child(userID).child("favorites").getValue().toString(); 
    Log.v("DATA", "DATA: " + data); 
} 

データが返されます。たとえば、{-L-DpQQCX8GYKPWclOX4=test}です。返されるオブジェクトを反復処理しますか?またはFirebaseでこれを間違っていて、何とか各値を取得する必要がありますか?これに関する文書がある場合は、リンクを共有してください。私はランダムキーのためにそれを見つけるつもりはありません。

EDIT :::

私のリスナーがある:

myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      showData(dataSnapshot); 
     } 

     @Override 
     public void onCancelled(DatabaseError error) { 
      // Failed to read value 
      Log.w(TAG, "Failed to read value.", error.toException()); 
     } 
    }); 

私はオブジェクトを解析することにより、鍵データを見ることができた:

JSONObject json = null; 
      try { 
       json = new JSONObject(data); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      for(Iterator<String> iter = json.keys();iter.hasNext();) { 
       String key = iter.next(); 
       Log.e("KEY",key); 
       array.add(key); 
      } 
+0

リスナーを接続するコードを含めるように質問を更新してください。リスナーを取得すると、取得するスナップショットのタイプが決まるためです。 –

答えて

0

Firebaseデータベースからデータを取得するにはJSONObjectを使用する必要はありません。あなたは単純にリスナーを添付して、このようなgetChildren()を使用してdataSnapshotオブジェクトを反復処理することができます:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference favoritesRef = rootRef.child("users").child(userID).child("favorites"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String key = ds.getKey(); 
      String value = ds.getValue(String.class); 
      Log.d("TAG", key + value); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
favoritesRef.addListenerForSingleValueEvent(eventListener); 

このコードを使用すると、favorites場所からすべてのキーと値を取得することができます。

関連する問題