我正在将socket.io用于我的聊天应用程序。我有一个ArrayList,其中包含最后一条消息,用户名,时间。每当新消息以JSON格式到达时,它都应检查ArrayList中是否存在包含JSON的用户名。如果存在,则更新ArrayList,否则添加ArrayList。 这是我的代码:-
private Emitter.Listener handle1 = new Emitter.Listener() {
@Override
public void call(final Object... args) {
ChatLists.this.runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject)args[0];
try {
String sendername = data.getString("sender");
String lastMessage = data.getString("message");
String profileImage = data.getString("Profile");
String token = data.getString("fb_token");
chat_list chat_list = new chat_list(sendername,
profileImage, lastMessage, "0", "", "dummy", token);
if (chat_lists.size()==0){
chat_lists.add(chat_list);
}else {
for (int i=0;i<chat_lists.size();i++){
if (chat_lists.get(i).getContactname().equals(sendername)){
chat_lists.set(i,chat_list);
}else {
chat_lists.add(chat_list)
}
}
}
contactlistAdapter = new ContactlistAdapter(chat_lists);
recyclerView.setAdapter(contactlistAdapter);
contactlistAdapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
};
答案 0 :(得分:0)
好吧,您可以按照逻辑方式使用ArrayList的contains()
和set()
方法来解决您的问题,如下所示:-
if(chat_lists.contains(username))
chat_lists.set(indexOf(username), new_username);
else chat_lists.add(new_username);
答案 1 :(得分:0)
尝试一下:
if(chat_lists.contains(chat_list)){
chat_lists.remove(chat_list);
chat_lists.add(chat_list);
} else {
chat_lists.add(chat_list);
}
答案 2 :(得分:0)
阅读有关体系结构模式的信息,例如MVP。 您需要将消息存储在某处(在模型中),并更新相对于数据的视图。
还阅读了有关RecyclerView的信息,原因是ListView有点过时了
答案 3 :(得分:-1)
if (chat_lists.get(i).getContactname().equals(sendername)){
以上陈述使他们有问题。并没有达到您的if条件,而是遵循chat_lists.add(chat_list)
语句。
相反,equals
使用ignoreCasequals
。如果仍然无法解决您的问题,请使用调试模式或日志检查chat_lists.get(i).getContactname()
和sendername
是否相同。