2016-05-29 9 views
1

データスナップショットを次のような構造で繰り返したいと思います。親フォルダ/参照を指定せずにDatasnapshotを反復処理する方法

{ 
"data" : { 
"images" : { 
    "fw88v6xu6wybamg9zzt6" : { 
    "0550e909-3b30-4f83-9725-02fbe45b74ce" : 3, 
    "address" : "http://xxxxxxxxxxxxxxx.jpg", 
    "author" : "username1", 
    "author_id" : "0550e909-3b30-4f83-9725-02fbe45b74ce", 
    "location" : "0", 
    "rating" : 3 
    }, 
    "osgm6v7kfcjwogo5uv21" : { 
    "0550e909-3b30-4f83-9725-02fbe45b74ce" : 4, 
    "address" : "xxxxxxxxxxxxxxxx.jpg", 
    "author" : "username1", 
    "author_id" : "0550e909-3b30-4f83-9725-02fbe45b74ce", 
    "location" : "0", 
    "rating" : 4 
    }, 
    "prhpcbrrru7z8x6xtolq" : { 
    "0550e909-3b30-4f83-9725-02fbe45b74ce" : 6, 
    "address" : "xxxxxxxxxxxxxx.jpg", 
    "author" : "username2", 
    "author_id" : "0550e909-3b30-4f83-9725-02fbe45b74ce", 
    "location" : 0, 
    "rating" : 6 
    } 
}, 
"locations" : { 
    "location1" : { 
    "author" : "0550e909-3b30-4f83-9725-02fbe45b74ce", 
    "latitude" : 11.42222573, 
    "longitude" : 58.4348011 
    }, 
    "location2" : { 
    "author" : "0550e909-3b30-4f83-9725-02fbe45b74ce", 
    "latitude" : 11.42222573, 
    "longitude" : 38.4333311 
    } 
} 
} 

具体的に何を私がやっていることは、データ/イメージの子供のスナップショットを取得しているので、それは自動で3つのエントリになりますが、このようなfw88v6xu6wybamg9zzt6 などの参照を生成したので、私はアドレスを取得するために、特定のエントリにアクセスすることはできません著者の例については、私は私のアプリが

Iterable<DataSnapshot> imagesDir = snapshot.getChildren(); 

を取得し、私はこのスナップショットの各エントリの上に移動して、親REFを知らなくても、エントリの情報を取得する方法がわからないですしました。 ( fw88v6xu6wybamg9zzt6)?

は、すべての権利だけでなく、私はまだ私が何をしようとしています何を達するために右の構文を構築することができないことを検索するための正しい道に私を送るために、クリスにpost

Thankxになったが、 。

私の方法は以下の通りです。最初のログから

public void onDataChange(DataSnapshot snapshot) { 
      for (DataSnapshot child: snapshot.getChildren()) { 
       Log.i("MyTag", child.getValue().toString()); 
       imagesDir.add(String.valueOf(child.getValue())); 
      } 
      Log.i("MyTag", imagesDir.toString()); 

Iは、各ノードのすべての値の文字列を取得し、2つ目に、私はすべてのノードを含むようにアレイを構築しました。

私がしようとしているのは、特定のノード(アドレス値など)をonDataChangeメソッドの外で宣言したArrayListに追加することです。子ノードを反復するたびに発生します。ですから、forループの終わりまでに、この場合、私はarraylistに3つのアドレス(値のみ)を持ちます。

forループを構成する適切な方法は何ですか?

私が得意とした最終的なコードは、以下の通りです。

   public void onDataChange(DataSnapshot snapshot) { 
      for (DataSnapshot child: snapshot.getChildren()) { 
       Log.i("MyTag", child.getValue().toString()); 
       imagesDir.add(child.child("author").getValue(String.class)); 
      } 
      Log.i("MyTag_imagesDirFinal", imagesDir.toString()); 

答えて

7

あなたはimagesValueEventListenerを添付すると仮定すると:

public void onDataChange(DataSnapshot imagesSnapshot) { 
    for (DataSnapshot imageSnapshot: imagesSnapshot.getChildren()) { 
     imagesDir.add(imageSnapshot.child("address").getValue(String.class)); 
    } 
    Log.i("MyTag", imagesDir.toString()); 
} 
+0

あなたの助けをありがとう、私は今、私は小さな問題に直面していると言う必要がありますが、私は最初に何を使用したよりも混乱しないforループで行ったようにimagesSnapshotとしてDatasnapshotを宣言しなければならない"子供"しかしそれがどのように動作するか理解した。 – JanusJanus

1

あなたが「画像」のスナップショットを取得した場合、あなたも鍵を知らなくても、それぞれの画像を反復処理するGetChildrenメソッド()メソッドにアクセスすることができます。

必要に応じて、子にgetKey()を呼び出すことによってそれらのキーにアクセスできます。 GetChildrenメソッドへ

リファレンス()メソッドは、リファレンスドキュメントに記載されています。

https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html#public-methods

+0

は、あなたが得た、あなたに@Chris_Conwayありがとう私は正しい方向にこの方法を理解し、いくつかの検索の助けを借りて私はこの記事に似ていますが、私は何をしようとしているかを達成するための正しい構文を構築できませんでした。私の更新されたポストのee – JanusJanus

+0

あなたは大歓迎です。 for(DataSnapshot child:parent.getChildren()){...} 'を試しましたか? 'child.key'はそれらの子オブジェクトの一つの' fw88 ... 'キーを返さなければなりません。 –

関連する問題