gpt4 book ai didi

android - 如何使 RealmProxy[Object] 与其对应的 [Object] 相等?

转载 作者:行者123 更新时间:2023-11-29 19:19:11 26 4
gpt4 key购买 nike

好的,所以我为我的 android 应用程序实现了 Realm。该应用程序基本上是一个会计购物 list 混合体,用户可以在其中添加他或她已经购买的商品。

在我的包含 Realm 数据库实现的 Accounting 类中,添加项目的方法返回一个 int 到我的主 Activity 以在 RecyclerAdapter.notifyItemInserted 中使用。

这是该方法应该如何工作

public int addItem(final Item latestItem) {
mRealm.beginTransaction();
Number firstId = mRealm.where(Item.class).max("ID");
int nextId = firstId != null ? firstId.intValue() + 1 : 0;
Item firstItem = mRealm.where(Item.class)
.equalTo("mName", latestItem.getName())
.equalTo("mPrice", latestItem.getPrice())
.findFirst();

if (firstItem == null) {
latestItem.setID(nextId);
mRealm.copyToRealm(latestItem);
} else {
firstItem.setCount(firstItem.getCount() + latestItem.getCount());
}
mRealm.commitTransaction();
updateItemList();

int index = mItemList.indexOf(latestItem);
return index;

问题是索引是 -1,即对象不存在于我用此处显示的数据库对象填充的列表对象中:

private void updateItemList() {
mItemList = mRealm.where(Item.class).findAllSorted("mPrice", Sort.DESCENDING);
}

我已经尝试从数据库中手动检索对象,它显示为 RealmProxyItem。测试 equals() 返回 false。转换只会抛出 ClassCastException

我该怎么做才能确保 equals() 返回 true?

编辑:这是我的 Realm 模型

Item.java

public class Item extends RealmObject{
@PrimaryKey
private int ID;

private String mName;
private double mPrice;
private int mCount;
private int mItemType;

public Item() {/** Required due to Realm **/ }

public Item(String mName, double mPrice, int count, int itemType) {
this.mName = mName;
this.mPrice = mPrice;
this.mCount = count;
this.mItemType = itemType;
this.ID = 0;
}

/**public Item(String mName, double mPrice, int count) {
this(mName, mPrice, count, ItemType.NO_TYPE);
} **/

public String getName() {
return mName;
}

public void setName(String name) {
mName = name;
}

public double getPrice() {
return mPrice;
}

public int getCount() {
return mCount;
}

public void setCount(int count) {
mCount = count;
}

public int getItemType() {
return mItemType;
}

public int getID() {
return ID;
}

public void setID(int ID) {
this.ID = ID;
}

/** public ItemType getItemType() {
return mItemType;
} **/

@Override
public boolean equals(Object object) {
if (object == null) return false;
else if (object.getClass() != this.getClass()) return false;

Item item = (Item) object;

if (!item.getName().equals(this.getName())) return false;
else if (item.getPrice() != this.getPrice()) return false;
//else if (!item.getItemType().equals(this.getItemType())) return false;

return true;
}

@Override
public int hashCode() {
int hash = 5;
hash = 17 * hash + this.mName.hashCode();
hash = 17 * hash + (int) (Double.doubleToLongBits(this.mPrice) ^ (Double.doubleToLongBits(this.mPrice) >>> 32));
return hash;
}

public void increaseCountBy(int amount) {
mCount += amount;
}
}

最佳答案

因为你在你的模型中有一个主键,我会说将你的 equals() 方法更改为:

@Override
public boolean equals(Object object) {
if (object == null || !(object instanceof Item)) return false;
Item item = (Item) object;

return item.getID() == ID;
}

关于android - 如何使 RealmProxy[Object] 与其对应的 [Object] 相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com