0

我一直在嘗試使用下面顯示的代碼從特定的user_id獲取數據,但它不工作,並導致我的應用程序崩潰。任何幫助,將不勝感激。卡住從firebase中獲取數據到我的RecyclerView

的數據格式爲:

"Attendances" : { 

"QUvD9mBmxzVoKfRWpaVJdyrKXRv1" : { 
    "-Kn8A6CIFCWh6tfWRq9f" : { 
    "Date" : "21/5/2017", 
    "Time" : "8:42:32" 
    }, 

我只需要從用戶ID隨機密鑰的所有數據

public class MyReportActivity extends AppCompatActivity { 

FirebaseDatabase database; 
DatabaseReference myRef ; 
List<UserModel> list; 
RecyclerView recycle; 
Button view; 
private FirebaseAuth auth; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_report); 

    view = (Button) findViewById(R.id.view); 
    recycle = (RecyclerView) findViewById(R.id.recycle); 
    database = FirebaseDatabase.getInstance(); 
    auth = FirebaseAuth.getInstance(); 
    FirebaseUser user = auth.getCurrentUser(); 
    myRef = database.getInstance().getReference().child("Attendances").child(user.getUid()); 

    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. 

      if(dataSnapshot!=null) { 


       list = new ArrayList<UserModel>(); 
       for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { 

        UserModel value = dataSnapshot1.getValue(UserModel.class); 
        UserModel fire = new UserModel(); 
        String dateatt = value.getDate(); 
        String timeatt = value.getTime(); 
        fire.setDate(dateatt); 
        fire.setTime(timeatt); 
        list.add(fire); 

       } 
      } 

     } 

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

的錯誤是:

E/AndroidRuntime:致命異常:主要

   Process: com.attendanceapp.obare.myattendance, PID: 27471 
       com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.attendanceapp.obare.myattendance.ReportPackage.UserModel 
        at com.google.android.gms.internal.zzbtg.zze(Unknown Source) 
        at com.google.android.gms.internal.zzbtg.zzb(Unknown Source) 
        at com.google.android.gms.internal.zzbtg.zza(Unknown Source) 
        at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) 
        at com.attendanceapp.obare.myattendance.ReportPackage.MyReportActivity$1.onDataChange(MyReportActivity.java:64) 
        at com.google.android.gms.internal.zzbpx.zza(Unknown Source) 
        at com.google.android.gms.internal.zzbqx.zzZT(Unknown Source) 
        at com.google.android.gms.internal.zzbra$1.run(Unknown Source) 
        at android.os.Handler.handleCallback(Handler.java:815) 
        at android.os.Handler.dispatchMessage(Handler.java:104) 
        at android.os.Looper.loop(Looper.java:207) 
        at android.app.ActivityThread.main(ActivityThread.java:5728) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 
+0

在這種情況下,我使用了ChildEventListener而不是ValueEventListener。 –

回答

0

要獲得該數據,請使用此代碼:

ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for(DataSnapshot ds : dataSnapshot.getChildren()) { 
      String dateatt = ds.child("Date").getValue(String.class); 
      String timeatt = ds.child("Time").getValue(String.class); 
     } 

    } 

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

希望它有幫助。

相關問題