Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中创建领域对象后返回领域对象_Java_Android_Realm - Fatal编程技术网

如何在java中创建领域对象后返回领域对象

如何在java中创建领域对象后返回领域对象,java,android,realm,Java,Android,Realm,我需要一个方法来创建一个有2个条件的方法,首先如果领域中存在对象,如果存在,则返回它,如果不存在,则创建它,然后返回它 public RouteModel findOrInitById(final Long webId) { Realm realm = null; try { realm = Realm.getDefaultInstance(); RouteModel routeModel = realm.copyFromRealm(

我需要一个方法来创建一个有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;
  }
有没有办法不用查询就返回对象?

创建界面

public interface TransactionCallback<T> {
    void onSuccess(T result);
    void onFail();
}
公共接口事务回调{
成功无效(T结果);
void onFail();
}
然后您的方法将是
public void findOrInitById(最终长webId,最终TransactionCallback)

调用方法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
        }
    }
)
classVariable.findOrInitById(webid,
新建TransactionCallback(){
@凌驾
成功时公共无效(RouteModel结果){
//做点什么
}
@凌驾
public void onFail(){
//事务失败。为用户制作toast
}
}
)
通过调用
callback.onSuccess(newRouteModel)
可以将
领域对象
发送到调用
findOrInitById


小心:如果你在成功的
中做了一些东西,你仍然在
交易中
我有点困惑。。。你的问题到底是什么。我选你的最后一行

有没有办法不经过查询就返回对象? 不可以。在一个领域中,您总是必须假设其他客户机修改您的数据,因此查询是必需的


正如您在我的代码中所看到的,我刚刚在事务中创建了一个新的领域对象,我想返回一个新对象的副本,而不需要查询