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

时间:2017-04-20 19:31:42

标签: java android realm

我需要创建一个具有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;
  }

有没有办法在没有查询的情况下返回对象?

2 个答案:

答案 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)

我有点困惑......究竟是什么问题。我选择你的最后一行

  

有没有办法在没有查询的情况下返回对象?   在某个领域中,您必须假设其他客户端修改您的数据,因此查询是强制性的