DatabaseException:在反序列化时期望一个Map,但是得到了一个java.lang.Long类

时间:2016-08-15 17:52:31

标签: android firebase firebase-realtime-database

此问题/错误的根本原因是什么?怎么解决?我的数据模型结构不合理吗?或者我是否提出了错误的查询?

//添加新评论

String comment = medit.getText().toString();
Comment newComment = new Comment(user,comment,postKey);
db.child("Post-Comments").child(postKey).push().setValue(newComment);

//检索帖子中的所有评论 //使用FirebaseRecyclerView和片段

 DatabaseReference mRef = db.child("Post-Comments").child(postKey).getRef();

 adapter = new FirebaseRecyclerAdapter<Comment, myViewHolder> (Comment.class,
R.layout.comment_list_layout,myViewHolder.class, mRef)
  {
        @Override
        protected void populateViewHolder(myViewHolder viewHolder, 
            Comment model, int position) {


            viewHolder.bindToComments(model);
        }
    };

    rlm2 = new LinearLayoutManager(getActivity());
    rv2.setLayoutManager(rlm2);
    rv2.setAdapter(adapter);

//评论类

public class Comment {

public String comment;
public String reactUserId;
public Map<String,String> created_on;
public String postKey;



public Comment() {
}

public Comment(String reactUserId, String comment, String postKey) {

    this.reactUserId = reactUserId;
    this.postKey = postKey;
    this.comment = comment;
    this.created_on = ServerValue.TIMESTAMP;

}


public Map<String,Object> toMap(){
    Map<String,Object> values = new HashMap<>();

    values.put("userId",reactUserId);
    values.put("postKey",postKey);
    values.put("comment",comment);
    values.put("created_on",created_on);

    return values;

}
}// more getter and setters

// Stacktrace

10745-10745/com.dhiraj.firebaseapp E/AndroidRuntime: FATAL EXCEPTION: main
com.google.firebase.database.DatabaseException: 
Expected a Map while    deserializing, but got a class java.lang.Long

//来自Firebase DB的JSON

{
"Post-Comments" : {
 "-KPE1qy6FgcwOnb1YXRw" : 
    "-KPE1zMFviLJvEKxexB7" : {
    "AUTHOR" : "Dheeraj",
    "comment" : "the first time I am not sure if you have any questions please ",
    "created_on" : 1471278741281,
    "postKey" : "-KPE1qy6FgcwOnb1YXRw",
    "reactUserId" : "Dheeraj"
  },
  "-KPE221Xk5t9aMJfYoKD" : {
    "AUTHOR" : "Dheeraj",
    "comment" : "the first time I am not sure if you have any questions please ",
    "created_on" : 1471278756332,
    "postKey" : "-KPE1qy6FgcwOnb1YXRw",
    "reactUserId" : "Dheeraj"
  }
}
  },
 "Posts" : {
  "-KPE1qy6FgcwOnb1YXRw" : {
  "created on" : 1471278706910,
  "desc" : "the only one who has been sent to you and your family and friends are invited to view the full image to open ",
  "title" : "the following link ",
  "userId" : "Dhiraj"
},
"-KPE1vlYc5vF7AyL2OHL" : {
  "created on" : 1471278726738,
  "desc" : "hi I was thinking that it will take place at all and all the best way is to have ",
  "title" : "good afternoon ",
  "userId" : "Dhiraj"
 }
},

}

1 个答案:

答案 0 :(得分:7)

mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference("Post-Comments")

Query queryRef = mFirebaseDatabaseReference.orderByKey();
            queryRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                        if (dataSnapshot != null && dataSnapshot.getValue() != null) {
                        Log.e("Count ", "" + dataSnapshot.getChildrenCount());
                        Map<String, Object> objectMap = (HashMap<String, Object>)
                                dataSnapshot.getValue();
                        ArrayList<ItemsReceived> itemsReceivedList = new ArrayList<>();

                        for (Object obj : objectMap.values()) {
                            if (obj instanceof Map) {
                                Map<String, Object> mapObj = (Map<String, Object>) obj;
                                ItemsReceived itemsReceived = new ItemsReceived();
                                itemsReceived.setAccount((String) mapObj.get("AUTHOR"));
                                itemsReceived.setAdded((long) mapObj.get("comment"));

                                itemsReceivedList.add(itemsReceived);

                                Log.e(TAG, "Data is" + itemsReceived.getAdded());


                            }
                        }

                        itemsRecievedListAdapter = new ItemsRecievedListAdapter(MainActivity.this, itemsReceivedList);
                        mRecyclerView.setAdapter(itemsRecievedListAdapter);
    //
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });`

在必要时替换我的变量我只是想说明一点而不是完全解决...我希望它有所帮助