【问题标题】:Problem with retrieving data from firebase从firebase检索数据的问题
【发布时间】:2019-02-23 22:27:07
【问题描述】:

这是错误日志 我在从 firebase 实时数据库中检索数据时遇到问题。 java.lang.ClassCastException:java.lang.String 无法转换为 java.util.Map

E/AndroidRuntime: FATAL EXCEPTION: main
Process: root.example.com.chatrack, PID: 31556
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
    at root.example.com.chatrack.ChatActivity.AmbilDataGroup(ChatActivity.java:156)
    at root.example.com.chatrack.ChatActivity.access$200(ChatActivity.java:48)
    at root.example.com.chatrack.ChatActivity$2.onDataChange(ChatActivity.java:140)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.6:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.6:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.6:55)
    at android.os.Handler.handleCallback(Handler.java:794)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:176)
    at android.app.ActivityThread.main(ActivityThread.java:6635)
    at java.lang.reflect.Method.invoke(Native Method)

我不知道出了什么问题 这是我用来检索数据的代码

DatabaseReference add = mFirebaseDatabase.getReference().child("CHATRACK").child("USER").child(Child);
        Log.d(TAG, "getFriendsInfo() returned: " + add);
        add.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.d(TAG, "onDataChange() returned: " + dataSnapshot);
                Log.d(TAG, "onDataChange() returned: " + Child.size());
                AmbilDataGroup((Map<String, Object>) dataSnapshot.getValue());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

private void AmbilDataGroup(Map<String, Object> dataSnapshot) {
final ArrayList<String> Nama = new ArrayList<>();
    for (Map.Entry<String, Object> entry : dataSnapshot.entrySet()) 
    {
        Map nama= (Map) entry.getValue();
        Nama.add((String) nama.get("Nama"));
    }
}

为什么会这样。在其他活动中,相同的代码很好,没有问题。 我不明白。请帮忙

编辑

这里是我的数据库结构 enter image description here

【问题讨论】:

  • 我猜Map namaGroup = (Map) entry.getValue(); - 是getValue() 一个String 并且您正在尝试转换为Map
  • 是的,你猜对了。我不知道发生了什么
  • 请添加您的数据库结构,也请回复@AlexMamo
  • @AlexMamo 数据库结构。
  • @dwikyhardiansah 这行Child 的值是多少.child(Child)

标签: java android firebase firebase-realtime-database


【解决方案1】:
String value = "{first_name = naresh,last_name = kumar,gender = male}";
value = value.substring(1, value.length()-1);           //remove curly brackets
String[] keyValuePairs = value.split(",");              //split the string to creat key-value pairs
Map<String,String> map = new HashMap<>();               

for(String pair : keyValuePairs)                        //iterate over the pairs
{
    String[] entry = pair.split("=");                   //split the pairs to get key and value 
    map.put(entry[0].trim(), entry[1].trim());          //add them to the hashmap and trim whitespaces
}

中添加此代码
DatabaseReference add = mFirebaseDatabase.getReference().child("CHATRACK").child("USER").child(Child);
        Log.d(TAG, "getFriendsInfo() returned: " + add);
        add.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.d(TAG, "onDataChange() returned: " + dataSnapshot);
                Log.d(TAG, "onDataChange() returned: " + Child.size());
                String value = dataSnapshot.getValue();
                value = value.substring(1, value.length()-1);           //remove curly brackets
String[] keyValuePairs = value.split(",");              //split the string to creat key-value pairs
Map<String,String> map = new HashMap<>();              

for(String pair : keyValuePairs)                        //iterate over the pairs
{
    String[] entry = pair.split("=");                   //split the pairs to get key and value 
    map.put(entry[0].trim(), entry[1].trim());          //add them to the hashmap and trim whitespaces
}
                AmbilDataGroup(map);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

private void AmbilDataGroup(Map<String, Object> dataSnapshot) {
    final ArrayList<String> NamaGroup = new ArrayList<>();
    for (Map.Entry<String, Object> entry : dataSnapshot.entrySet()) {
        Map namaGroup = (Map) entry.getValue();
        NamaGroup.add((String) namaGroup.get("GroupName"));
    }
    final ArrayList<String> GroupMember = new ArrayList<>();
    for (Map.Entry<String, Object> entry : dataSnapshot.entrySet()) {
        Map groupMember = (Map) entry.getValue();
        GroupMember.add((String) groupMember.get("GroupMember"));
    }
    final ArrayList<String> GroupId = new ArrayList<>();
    for (Map.Entry<String, Object> entry : dataSnapshot.entrySet()) {
        Map groupId = (Map) entry.getValue();
        GroupId.add((String) groupId.get("GroupId"));
    }

    String[] member = GroupMember.toString().split(",");
    String memberId;
    if (GroupId != null) {
        int i = 0;
        while (GroupId.size() > i) {
            memberId = GroupMember.get(i).replace("[", "").replace("]", "");
            Log.d(TAG, "AmbilDataGroup() returned: " + GroupMember.get(i).split(","));
            if (memberId.contains(UserId)) {
            }
            Log.d(TAG, "AmbilDataGroup() returned: int i" + i);
            i++;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2017-01-15
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多