我注意到一个非常奇怪的情况……
private void saveFavArticles() {
SharedPreferences pref = getSharedPreferences(PUT_FAVORITE_CRNT_ARTICLE_KEY, Context.MODE_PRIVATE);
String currentFavList = pref.getString(PUT_FAVORITE_CRNT_ARTICLE_KEY, "");
SharedPreferences.Editor editor;
ArrayList<Article> articles = new ArrayList<>();
//if we have favorite articles
if(currentFavList != "") {
Type type = new TypeToken<List<Article>>(){}.getType();
articles = new Gson().fromJson(currentFavList, type);
//It returns true if the specified element is found in the list else it gives false.
if(articles.contains(currentArticle))
Toast.makeText(this, "this article exists into favorite list", Toast.LENGTH_SHORT).show();
else{
articles.add(currentArticle);
Toast.makeText(this, "current article added to favorites", Toast.LENGTH_SHORT).show();
}
editor = pref.edit();
editor.putString(DetailsActivity.PUT_FAVORITE_CRNT_ARTICLE_KEY, new Gson().toJson(articles));
}else {
editor = pref.edit();
articles.add(currentArticle);
editor.putString(DetailsActivity.PUT_FAVORITE_CRNT_ARTICLE_KEY, new Gson().toJson(articles));
Toast.makeText(this, "current article added to favorites", Toast.LENGTH_SHORT).show();
}
editor.commit();
}
我正在调试此语句…问题是,即使我的arraylist包含currentArticle,它也总是说不是。
有什么帮助吗?
由于商品arraylist是自定义对象的列表,因此您需要重写equals方法,并假设默认实现不是您所需要的。
List.contains(...)方法定义为使用equals(Object)来确定参数对象是否由列表“包含”。当您比较对象(带有contains方法)时,它实际上是比较JAVA生成的哈希码。
因此您的模型类必须重写equals和hashCode方法
@Override
public boolean equals(final Object object) {
if (object instanceof Selector) {
Selector target = (Selector) object;
return target.name.equalsIgnoreCase(name);
}
return false;
}
@Override
public int hashCode() {
return toString().hashCode();
}
我的样本模型类是
public final class Selector {
private String name;
public Selector(final String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
@Override
public boolean equals(final Object object) {
if (object instanceof Selector) {
Selector target = (Selector) object;
return target.name.equalsIgnoreCase(name);
}
return false;
}
@Override
public int hashCode() {
return toString().hashCode();
}
}
在这里,我正在根据NAME比较我的对象,您可以使用变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句