2015-10-01 85 views
42

我想從android中的Firebase中獲取所有子女名單。如何從Firebase獲取所有子女名單android

我已經實現了這個代碼,但它不工作。

mFirebaseRef = new Firebase(FIREBASE_URL); 

mFirebaseRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     List<String> td = (ArrayList<String>) dataSnapshot.getValue(); 
     //notifyDataSetChanged(); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
+0

可能重複:http://stackoverflow.com/questions/27848313/firebase-retrieve-child-android下面 –

+1

答案。但這部分是猜測,因爲「它不工作」的含義非常模糊,並且不包含您的數據片段。如果我的回答沒有解決你的問題:你會得到什麼錯誤?你的數據是什麼樣子的(複製/粘貼它的樣本,沒有截圖和描述)? –

+0

試試這個:http://stackoverflow.com/questions/32886546/how-to-get-all-child-list-from-firebase-android/36600791#36600791 –

回答

27

火力地堡值存儲在此格式的序列:

"-K-Y_Rhyxy9kfzIWw7Jq": "Value 1" 
"-K-Y_RqDV_zbNLPJYnOA": "Value 2" 
"-K-Y_SBoKvx6gAabUPDK": "Value 3" 

如果這是你如何讓他們,你所得到的錯誤類型。上述結構被表示爲Map,而不是作爲一個List

mFirebaseRef = new Firebase(FIREBASE_URL); 

mFirebaseRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Map<String, Object> td = (HashMap<String,Object>) dataSnapshot.getValue(); 

     List<Object> values = td.values(); 

     //notifyDataSetChanged(); 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
+0

我想要父列表「-K-Y_Rhyxy9kfzIWw7Jq」: 「Value 1」 「-K-Y_RqDV_zbNLPJYnOA」:「Value 2」 「-K-Y_SBoKvx6gAabUPDK」:「Value 3」 –

+0

可以使用Map =(HashMap ) dataSnapshot.getValue();'還是必須將Object轉換爲MyDataObject? –

+0

@Frank,Android工作室在此行上顯示紅色下劃線列表 values = td.values(); ...錯誤: - 無法將集合對象轉換爲列表對象..堆棧跟蹤中發生錯誤.. –

64

希望下面的代碼工作

Firebase ref = new Firebase(FIREBASE_URL); 

    ref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      Log.e("Count " ,""+snapshot.getChildrenCount()); 
      for (DataSnapshot postSnapshot: snapshot.getChildren()) { 
      <YourClass> post = postSnapshot.getValue(<YourClass>.class); 
      Log.e("Get Data", post.<YourMethod>()); 
      } 
     } 
     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
      Log.e("The read failed: " ,firebaseError.getMessage()); 
     } 
    }); 
+4

當我打印日誌時它是空的。你可以幫幫我嗎? –

+0

救了我一天。非常感謝你! –

+0

請問你可以發佈數據在樹狀結構中,我卡在這.. –

4

保存和Retriving數據 - 從火力地堡(不建議使用版本2.4.2)

Firebase fb_parent = new Firebase("YOUR-FIREBASE-URL/"); 
Firebase fb_to_read = fb_parent.child("students/names"); 
Firebase fb_put_child = fb_to_read.push(); // REMEMBER THIS FOR PUSH METHOD 

//INSERT DATA TO STUDENT - NAMES I Use Push Method 
fb_put_child.setValue("Zacharia"); //OR fb_put_child.setValue(YOUR MODEL) 
fb_put_child.setValue("Joseph"); //OR fb_put_child.setValue(YOUR MODEL) 
fb_put_child.setValue("bla blaaa"); //OR fb_put_child.setValue(YOUR MODEL) 

//GET DATA FROM FIREBASE INTO ARRAYLIST 
fb_to_read.addValuesEventListener....{ 
    public void onDataChange(DataSnapshot result){ 
     List<String> lst = new ArrayList<String>(); // Result will be holded Here 
     for(DataSnapshot dsp : result.getChildren()){ 
      lst.add(String.valueOf(dsp.getKey())); //add result into array list 
     } 
     //NOW YOU HAVE ARRAYLIST WHICH HOLD RESULTS 




for(String data:lst){ 
     Toast.make(context,data,Toast.LONG_LENGTH).show; 
     } 
    } 
} 
9

我做了這樣的事情:

Firebase ref = new Firebase(FIREBASE_URL); 
ref.addValueEventListener(new ValueEventListener() { 

@Override 
public void onDataChange(DataSnapshot snapshot) { 
    Map<String, Object> objectMap = (HashMap<String, Object>)  
      dataSnapshot.getValue(); 
    List<Match> = new ArrayList<Match>(); 
    for (Object obj : objectMap.values()) { 
     if (obj instanceof Map) { 
      Map<String, Object> mapObj = (Map<String, Object>) obj; 
      Match match = new Match(); 
      match.setSport((String) mapObj.get(Constants.SPORT)); 
      match.setPlayingWith((String) mapObj.get(Constants.PLAYER)); 
      list.add(match); 
     } 
    } 
    } 
    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 
+0

實際上幫助我,謝謝! – JozeRi

+0

歡迎您@JozeRi :) – ruchita

+1

我的理解對不對?每次即使只添加一個匹配類型值,您也在循環播放? – MeLine

17
FirebaseDatabase mFirebaseDatabase = FirebaseDatabase.getInstance(); 
DatabaseReference databaseReference = mFirebaseDatabase.getReference(FIREBASE_URL); 
     databaseReference.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) { 
        Log.v(TAG,""+ childDataSnapshot.getKey()); //displays the key for the node 
        Log.v(TAG,""+ childDataSnapshot.child(--ENTER THE KEY NAME eg. firstname or email etc.--).getValue()); //gives the value for given keyname 
       } 
      } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

希望它有幫助!

3

在我的情況下,只有給定的解決方案工作正常。

火力地堡的ArrayList結構的截圖:

enter image description here

如何火力地堡DataSnapshot獲取整個列表

GenericTypeIndicator<Map<String, List<Education>>> genericTypeIndicator = new GenericTypeIndicator<Map<String, List<Education>>>() {}; 
Map<String, List<Education>> hashMap = dataSnapshot.getValue(genericTypeIndicator); 

for (Map.Entry<String,List<Education>> entry : hashMap.entrySet()) { 
     List<Education> educations = entry.getValue(); 
     for (Education education: educations){ 
      Log.i(TAG, education.Degree); 
     } 
} 

Education.java:(型號類)。

public class Education implements Serializable{ 

    public String Degree; 
    public String Result; 
} 

希望這可以正常工作。

7

弗蘭克說的"key": "Value" 格式值火力地堡商店序列,是a 地圖結構

從這個序列,你必須

得到 列表
  1. 初始化GenericTypeIndicator with HashMap of 字符串和您的對象
  2. 得到DataSnapShot的價值GenericTypeIndicator地圖
  3. 初始化ArrayListHashMap值。

GenericTypeIndicator<HashMap<String, Object>> objectsGTypeInd = new GenericTypeIndicator<HashMap<String, Object>>() {}; 
Map<String, Object> objectHashMap = dataSnapShot.getValue(objectsGTypeInd); 
ArrayList<Object> objectArrayList = new ArrayList<Object>(objectHashMap.values()); 

正常工作對我來說,希望它能幫助。

0
mDatabase.child("token").addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot snapshot:dataSnapshot.getChildren()) 
       { 
       String key= snapshot.getKey(); 
       String value=snapshot.getValue().toString(); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Toast.makeText(ListUser.this,databaseError.toString(),Toast.LENGTH_SHORT).show(); 
      } 
     }); 

唯一的工作。如果孩子沒有SubChild

enter image description here

+0

**這是用於單個時間閱讀特定的甲酸** –