首页 > 解决方案 > gle.firebase.database.core.utilities.encoding.CustomClassMapper.serialize 错误是什么?

问题描述

我正在尝试开发聊天应用程序,但出现此错误,

E/AndroidRuntime:在 com.google.firebase.database.core.utilities.encoding.CustomClassMapper.serialize(com.google.firebase:firebase-database@@16.0.5:141)

在 com.example.sakuna.pext.ChatActivity$2.onDataChange(ChatActivity.java:135)

userRootRefDB.updateChildren(chatUsersMap, new DatabaseReference.CompletionListener() {
                    @Override
                    public void onComplete( DatabaseError databaseError, DatabaseReference databaseReference) {

                        if(databaseError != null){
                            Log.d("ChatLog",databaseError.getMessage().toString());
                        }
                    }
                });

我需要什么来解决这个错误,

这是 chatActivity.class

public class ChatActivity extends AppCompatActivity {

    private DatabaseReference userRootRefDB;
    private String chatUser;
    private String chatUserName;

    private Toolbar chatToolBar;

    private TextView userNameTitleView;
    private TextView userLastSeenView;
    private CircleImageView profileImageView;

    private FirebaseAuth mAuth;

    private String currentUserID;



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


        mAuth = FirebaseAuth.getInstance();
        currentUserID = mAuth.getCurrentUser().getUid();

        chatUser = getIntent().getStringExtra("userID");
        chatUserName = getIntent().getStringExtra("chatUserName");

        userRootRefDB = FirebaseDatabase.getInstance().getReference();


        chatToolBar = findViewById(R.id.chatActivityToolbar);

        setSupportActionBar(chatToolBar);
        ActionBar userChatActionBar = getSupportActionBar();
        userChatActionBar.setDisplayHomeAsUpEnabled(true);
        userChatActionBar.setDisplayShowCustomEnabled(true);
        //getSupportActionBar().setTitle(chatUser);

        chatUser = getIntent().getStringExtra("userID");
        String userName = getIntent().getStringExtra("chatUserName");

        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View actionBarView = inflater.inflate(R.layout.custom_chat_bar,null);

        userChatActionBar.setCustomView(actionBarView);

        //-----------------------------------------------------------------------------------custbar

        userNameTitleView = findViewById(R.id.userFriendChatDisplayName);
        userLastSeenView = findViewById(R.id.userFriendChatLastSeen);
        profileImageView = findViewById(R.id.displayImage);

        userNameTitleView.setText(userName);

        userRootRefDB.child("Users").child(chatUser).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {



                String online = dataSnapshot.child("Online").getValue().toString();
                String lastOnlineTime = dataSnapshot.child("LastSeen").getValue().toString();
                long lastTime =Long.parseLong(lastOnlineTime);


                String image = dataSnapshot.child("Image").getValue().toString();

                if(online.equals("true")){
                    userLastSeenView.setText("Online");
                }else{
                    TimeCal calculateTime = new TimeCal();





                    String lastSeenTime = calculateTime.getTimeAgo(lastTime,getApplicationContext());

                    userLastSeenView.setText(lastSeenTime);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                System.out.println("The read failed: " + databaseError.getMessage());
            }
        });


        userRootRefDB.child("Chat").child(currentUserID).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(!dataSnapshot.hasChild(chatUser)){
                    Map addChatMap = new HashMap();

                    //default values
                    addChatMap.put("Seen",false);
                    addChatMap.put("TimeStamp",ServerValue.TIMESTAMP);

                    Map chatUsersMap= new HashMap();
                    chatUsersMap.put("Chat/"+currentUserID + "/" + chatUser,chatUsersMap);
                    chatUsersMap.put("Chat/"+chatUser + "/" + currentUserID,chatUsersMap);

                    userRootRefDB.updateChildren(chatUsersMap, new DatabaseReference.CompletionListener() {
                        @Override
                        public void onComplete( DatabaseError databaseError, DatabaseReference databaseReference) {

                            if(databaseError != null){
                                Log.d("ChatLog",databaseError.getMessage().toString());
                            }
                        }
                    });



                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

    }
}

也为了改进我在这里犯的错误,我想得到任何建议。

标签: javaandroidfirebase

解决方案


所以我发现了问题所在。

问题就在这里。

Map addChatMap = new HashMap();
  addChatMap.put("Seen",false);
  addChatMap.put("TimeStamp",ServerValue.TIMESTAMP);

Map chatUsersMap= new HashMap();
  chatUsersMap.put("Chat/"+ currentUserID + "/" + chatUser,chatUsersMap);
  chatUsersMap.put("Chat/"+ chatUser + "/" + currentUserID,chatUsersMap);

当我输入值时,我添加了相同的 hashmap ->chatUsersMap 作为对象值。我已经改变了它,如下所示并改变对象值如下。

Map addChatMap = new HashMap();
  addChatMap.put("Seen",false);
  addChatMap.put("TimeStamp",ServerValue.TIMESTAMP);

Map chatUsersMap= new HashMap();
  chatUsersMap.put("Chat/"+ currentUserID + "/" + chatUser,addChatMap);
  chatUsersMap.put("Chat/"+ chatUser + "/" + currentUserID,addChatMap);

推荐阅读