您好我正在尝试实现基于SQLite的应用程序,并在我的数据库表中有一些值。我的一个列中包含一些类似的值并且为了克服重复,我使用了set<>
public Set<NewTableAnswers> newtableAnswers(String product_id) {
Set<NewTableAnswers> d = new HashSet<>();
SQLiteDatabase db = this.getReadableDatabase();
String SelectA1 = "SELECT * FROM " +TABLE_ANSWERS+ " WHERE " + ANSWER_ID + " = '"+ product_id + "' ";
Cursor cursor = db.rawQuery(SelectA1,null);
if (cursor.moveToFirst()){
do{
d.add(new NewTableAnswers(cursor.getString(1)));
}while (cursor.moveToNext());
}
db.close();
return d;
如果有重复,set应该遵循其属性以避免重复,但是它给了我不同对象的相同值...就像这样...
更新
这是我的模特课..
public class NewTableAnswers {
String pro_id;
public NewTableAnswers(String pro_id) {
this.pro_id = pro_id;
}
public String getPro_id() {
return pro_id;
}
public void setPro_id(String pro_id) {
this.pro_id = pro_id;
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof NewTableAnswers)) return false;
NewTableAnswers that = (NewTableAnswers) o;
return Objects.equals(getPro_id(), that.getPro_id());
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public int hashCode() {
return Objects.hash(getPro_id());
}
}
答案 0 :(得分:1)
我已尝试过您的代码,如果删除注释,它似乎工作正常。
我的猜测是因为注释:
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
方法equals
和hashCode
未被注入。我强烈建议删除这些注释,因为equals
和hashCode
绝不是Kitkat API的独占部分。它们从Java一开始就存在。