我正在创建一个活动,学生可以在其中检查特定月份的出勤率。在选择月份时,他们将被定向到他们所在月份的日期。问题是我能够获取它们出现在列表视图上的日期数据,但是当我尝试访问“月份”节点时,该应用程序停止工作。
Attendance Record
{
AUGUST :
{
2019-08-31 : PRESENT
}
SEPTEMBER :
{
2019-09-02 : PRESENT
2019-09-03 : PRESENT
}
简而言之,我想访问节点“出勤记录”的子节点。
这是我用来在列表视图中插入“出勤记录”即“AUGUST”和“SEPTEMBER”的子节点的代码:
databaseReference = firebaseDatabase.getReference(firebaseAuth.getUid()).child("Attendance Record");
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
String data = dataSnapshot.getValue(String.class);
arrayList.add(data);
arrayAdapter.notifyDataSetChanged();
}
堆栈跟踪:
2019-09-12 12:54:11.854 28475-28475/com.example.appattendance E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.appattendance, PID: 28475
com.google.firebase.database.DatabaseException: Failed to convert value of type java.util.HashMap to String
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertString(com.google.firebase:firebase-database@@18.0.1:408)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@18.0.1:199)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@18.0.1:79)
at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@18.0.1:212)
at com.example.appattendance.Activity_Record$1.onChildAdded(Activity_Record.java:79)
at com.google.firebase.database.core.ChildEventRegistration.fireEvent(com.google.firebase:firebase-database@@18.0.1:79)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@18.0.1:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@18.0.1:55)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
尝试这样的事情并检查输出。
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Monthlist = new ArrayList<String>();
for (DataSnapshot dsp : dataSnapshot.getChildren()) {
String monthkey = dsp.getKey();
Monthlist.add(monthkey); //add result into array list
}
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError error) {
Log.w(TAG, "Failed to read value.", error.toException());
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句