我有这个消息数组,我想用API调用获得的新消息来更新它。我正在遍历我得到的数组,然后检查消息是否已经在ArrayList中。如果没有,我将其添加到列表中。
但是,由于某些未知原因,它不起作用。它复制了列表中的所有项目,但新项目永远不会存在。我无法弄清楚我的equals()
或hashCode()
实施有什么问题。
@Override
public boolean equals(Object object) {
boolean result = false;
if (object == null || object.getClass() != getClass()) {
result = false;
} else {
Message mess = (Message) object;
if (this.id == mess.getId() && this.extid == mess.getExtid()) {
result = true;
}
}
return result;
}
@Override
public int hashCode() {
int hash = 3;
hash = 7 * hash + this.id.hashCode();
hash = 7 * hash + this.extid.hashCode();
return hash;
}
populateData()
:
private void populateData(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray ArrayMessages = jsonObject.getJSONArray("messages");
Gson gson = new Gson();
Message[] messages = gson.fromJson(ArrayMessages.toString(), Message[].class);
for (Message message : messages) {
if(!messageList.contains(message)) {
messageList.add(message);
}
}
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
答案 0 :(得分:1)
id
和extId
的类型是什么?您应该将它们与equals()
而不是==
进行比较,并且使用set
将避免必须检查该元素是否已经在集合中,因为集合不允许重复。