2016-11-03 7 views
3

데이터를 중포 기지 데이터베이스에서 데이터를 읽을 수 없습니다.목록으로

내 방법은 다음과 같습니다

public static void writePostToFriends(final String userId, final String userName, final String title, final String body, final String authorPhoto){ 
    DatabaseReference mpostRef = FirebaseDatabase.getInstance().getReference().child("social/user/"+userId+"/friends"); 
    mpostRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      GenericTypeIndicator<List<Friends>> t = new GenericTypeIndicator<List<Friends>>() {}; 
      List<Friends> mFriends = dataSnapshot.getValue(t); 
      long j = mFriends.size(); 
      for (long i = 0; i == j; i++){ 
       Friends mReadFriends = dataSnapshot.getValue(Friends.class); 
       String getUid = mReadFriends.userID; 
       writeNewPost(getUid, userId, userName, title, body, authorPhoto); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

을하지만 읽으려고 할 때이 오류 제공 -

프로세스 : com.evolutionstudios.atmiyo, PID : 19506 com.google.firebase합니다. database.DatabaseException : 역 직렬화 중에 목록을 가져 오지만 com.google.android.gms.internal.zzanp.zza (알려지지 않은 출처)의 java.util.HashMap 클래스가 com.google.android.gms.internal에서 에 있습니다. zz anp.zza (알 수없는 출처) at com.google.android.gms.internal.zzanp.zza (알 수없는 출처) at com.google.firebase.database.DataSnapshot.getValue (알 수없는 출처) at com.evolutionstudios.atmiyo .Utils.NotificationHelper $ 1.onDataChange (NotificationHelper.java:40) (com.google.android.gms.internal.zzakg.zza) (알 수없는 출처) com.google.android.gms.internal.zzalg.zzcxk (알 수 없음 소스) com.google.android.gms.internal.zzalj $ 1.run (알 수없는 출처) android.os.Handler.handleCallback (Handler.java:739) android.os.Handler.dispatchMessage (Handler. java : 95) at android.os.Looper.loop (Looper.java:148)

누군가가 배열이나 목록으로 데이터에서 userID를 얻는 방법을 알아낼 수 있습니까?

답변

11

오류 메시지는 그것의 요점이 포함 목록 deserialize하는 동안 예상

,하지만 당신은 당신의 데이터베이스를 보면

, 당신은 볼 java.util.HashMap에 클래스를 가지고 키 + 값의 모음. Java에서는 Map으로 변환되고 List으로 변환되지 않습니다. 당신이 값에만 관심이 있다면

, 당신은 당신의 코드에서 ListMap에서 변환을 처리해야합니다

public void onDataChange(DataSnapshot dataSnapshot) { 
    GenericTypeIndicator<Map<String, Friends>> t = new GenericTypeIndicator<Map<String, Friends>>() {}; 
    Map<String, Friends> map = dataSnapshot.getValue(t); 

    // get the values from map.values(); 

또는 간단 :

public void onDataChange(DataSnapshot dataSnapshot) { 
    List<Friends> list = new ArrayList<Friends>(); 
    for (DataSnapshot child: dataSnapshot.getChildren()) { 
     list.add(child.getValue(Friends.class)); 
    } 
} 
+0

확인 난 레이 것 그것. 고맙습니다 너무 많이 –

+0

마지막 줄에 코드가 필요하다 : 목록이 있지만 모음을 찾았습니다 –

+0

아 ... 그럴 수 있습니다. 언제든지 편집 할 수 있습니다. 중요한 대답은'snapshot.getValue()'는'List'가 아니라'Map'입니다. 이 코드를 더 간단하게 만들었습니다. –

관련 문제