2017-04-20 69 views
0

我需要創建一個具有2個條件的方法,首先如果對象存在於領域,如果存在,則返回它,如果不存在,則創建它並返回它。如何在java中創建後返回領域對象

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

,你可以在我的代碼中看到的,我只是一個事務裏的新境界對象,我想無需查詢即可返回新對象的副本 – Spaceghost87

0

創建界面

public interface TransactionCallback<T> { 
    void onSuccess(T result); 
    void onFail(); 
} 

那麼你的方法是public void findOrInitById(final Long webId, final TransactionCallback<RouteModel> callback)

調用的方法寫

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