我需要创建一个具有2个条件的方法,首先如果对象存在于领域中,如果它存在,则返回它,如果不存在,则创建它然后返回它。
public RouteModel findOrInitById(final Long webId) {
Realm realm = null;
try {
realm = Realm.getDefaultInstance();
RouteModel routeModel = realm.copyFromRealm(
realm.where(RouteModel.class).equalTo("routeWebId", webId).findFirst());
if (routeModel != null) {
return routeModel;
} else {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Number currentIdNum = realm.where(RouteModel.class).max("routeId");
int nextId;
if (currentIdNum == null) {
nextId = 1;
} else {
nextId = currentIdNum.intValue() + 1;
}
RouteModel newRouteModel = new RouteModel.Builder()
.setRouteId(nextId)
.setWebId(webId)
.build();
realm.copyToRealmOrUpdate(newRouteModel);
}
});
//here i need to return the "new " object
}
} finally {
if (realm != null) {
realm.close();
}
}
return null;
}
有没有办法在没有查询的情况下返回对象?
答案 0 :(得分:0)
创建界面
public interface TransactionCallback<T> {
void onSuccess(T result);
void onFail();
}
那么您的方法就是public void findOrInitById(final Long webId, final TransactionCallback<RouteModel> callback)
调用方法write
classVariable.findOrInitById(webid,
new TransactionCallback<RouteModel>() {
@Override
public void onSuccess(RouteModel result) {
// make something
}
@Override
public void onFail() {
// transaction failed. make toast for user
}
}
)
致电callback.onSuccess(newRouteModel)
,将realm-Object
发送至您致电的地方findOrInitById
警告:如果您在onSuccess
中填写了某些内容,那么您仍然在transaction
答案 1 :(得分:0)
我有点困惑......究竟是什么问题。我选择你的最后一行
有没有办法在没有查询的情况下返回对象? 在某个领域中,您必须假设其他客户端修改您的数据,因此查询是强制性的