2017-06-27 21 views
1

Firebaseデータベースからいくつかの問題を読み取っています。単純なFireBaseデータベースからの読み込み

I {}は全てこの上にある非常に単純なレイアウトをコースもしmyAppNameの

{ 
    "lot" : { 
    "lot1" : "low", 
    "lot2" : "low", 
    "lot3" : "low" 
    } 
} 

を有します。

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef = database.getInstance().getReference(); 

    // Read from the database 
    myRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      // This method is called once with the initial value and again 
      // whenever data at this location is updated. 

      lotMap = (HashMap) dataSnapshot.getValue(); 
      Log.d("[Directions Activity]: ", "Lot1 value ====== " +lotMap.get("lot")); 
      Iterator it = lotMap.entrySet().iterator(); 
      while (it.hasNext()) { 
       Map.Entry pair = (Map.Entry)it.next(); 
       Log.d("[Directions Activity]: ", "iterator " + pair.getKey() + " = " + pair.getValue()); 
       System.out.println(); 
       it.remove(); // avoids a ConcurrentModificationException 
      } 

     } 

は、ここでは、文字列を返すだように見える、私に

D/[Directions Activity]:: Lot1 value ====== null //null obviously 
               //because key lot1 doesn't exist 
D/[Directions Activity]:: lot = {lot3=low, lot2=low, lot1=low} 

だから、ログから返すものだ{=低lot3 =低、lot2 =低、lot1}が、私はしたいのですが可能であれば、各値とともに配列を得ることができます。

これは達成可能ですか?

答えて

1

コードには微妙な違いがあります。あなたの

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getInstance().getReference(); 

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference database = myRef.child("anyValueNameYouSpecifyInConsole"); 

これらの2行はのonCreateメソッドの外に宣言する必要があり、このように書くべきです。 addValueEventListenerで指定する必要があるのは、2番目のDatabaseReferenceであり、最初のDatabaseReferenceではありません。したがって、私の例では、このようになります。

database.addValueEventListener (new ValueEventListener) 

それをインポートする方法です。

あなたが特定のTextViewに表示するデータをご希望の場合は、ただのTextViewあなたたいの使用をfindViewByIdので、

String x = dataSnapshot.getValue(String.class); 
textViewNameDeclared.setText(x); 

とセキュリティを変更することを忘れないでくださいようOnDataChangeの方法でそれを含めます読むためのルール。

+1

ありがとうございます!私はそれをショットを与えるよ! – Rickybobby

+1

これは完璧に働いた、ありがとう! – Rickybobby

0

あなたはJSONObjectに型キャストを使用し、lamada式を使用するよりも、あなたは、Java 8を使用している場合JSONObject

JSONObject jsonObject= new JSONObject((Map)dataSnapshot.getValue()); 

    JSONObject jsonObj= (JSONObject) jsonObject.get("lot"); 

     for (Object key : jsonObj.keySet()) { 
     //based on you key types 
     String keyStr = (String)key; 
     Object keyvalue = jsonObj.get(keyStr); 

     //Print key and value 
     System.out.println("key: "+ keyStr + " value: " + keyvalue); 
} 

を解析することができます。

関連する問題