从Firebase读取时出错“无法将java.util.HashMap类型的值转换为String”

时间:2017-10-18 03:50:18

标签: android firebase firebase-realtime-database

如何在文本视图中显示来自firebase的数据?当用户进行预约并单击确认后,将发送通知,然后通知应显示我的数据库日期和时间,但它有错误。

Notification Page XML

   myRef.child("Appointment").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
           TextView mDate = (TextView) findViewById(R.id.tvdate);
           // TextView mTime = (TextView) findViewById(R.id.tvtime);
            for(DataSnapshot ds : dataSnapshot.getChildren())
            Log.d("TAG",ds.child("Date").getValue(String.class));
        }

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

3 个答案:

答案 0 :(得分:0)

您的JSON中的级别位于/Appointment下(以n9nRQn开头的密钥)。您的代码需要处理此级别。

一种方式:

myRef.child("Appointment").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
        mDate.setText(childSnapshot.getValue(String.class));
        mTime.setText(childSnapshot.getValue(String.class));
      }
    }

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

答案 1 :(得分:0)

要解决此问题,请使用以下代码:

myRef.child("Appointment").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        TextView mDate = (TextView) findViewById(R.id.tvdate);
        TextView mTime = (TextView) findViewById(R.id.tvtime);

        for (DataSnapshot ds : dataSnapshot.getChildren()) {
            mDate.setText(ds.child("Date").getValue(String.class));
            mTime.setText(ds.child("Time").getValue(String.class));
        }
    }

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

发生这种情况是因为您错过了DatabaseReference中的孩子。

答案 2 :(得分:0)

您可以使用对象来保存您的日期和时间。 例如: -

// A new comment has been added, add it to the displayed list

        Comment comment = dataSnapshot.getValue(Comment.class);

https://firebase.google.com/docs/database/android/lists-of-data

从firebase获取数据非常简单。