java - 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) {
}
});
}
}
也为了改进我在这里犯的错误,我想得到任何建议。
解决方案
所以我发现了问题所在。
问题就在这里。
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);
推荐阅读
- amazon-web-services - 使用 CloudFormation Designer 自动生成 CF 模板可视化
- angular - 将 Angular 5 升级到 6 后出错,VSTS 构建
- ios - 带有自定义 UITextField 选项的 UIPickerView
- c# - 所有流量的 WebApi 自定义路由
- custom-controls - Cognos 11 javascript实现onkeyup
- android - JavaFX ScrollPane 在 Android 设备上非常慢
- architecture - 限界上下文如何与微服务的设计相关联?
- c# - 比较不同类型的装箱值
- c++ - 智能指针(唯一指针)和引用
- visual-studio - 如何在 Visual Studio 中启用热插拔