2016-04-09 79 views
0

叫我嘗試使用executeTransaction功能更新Realm記錄,但是當我打電話這段代碼從IntentServiceReam.Transaction.CallbackonSuccess是沒有得到自動調用copyToRealmOrUpdate後調用。的onSuccess是沒有得到來自IntentService

final Realm realm = getRealm() ; 

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 



     //some db operations and eventually calling 
     realm. 
     realm.copyToRealmOrUpdate(employeeList); 



    } 
}, new Realm.Transaction.Callback() { 
    @Override 
    public void onSuccess() { 

      // this function never gets called if 
     //the whole function is called from IntentService 
      realm.close(); 


    } 

    @Override 
    public void onError(Exception e) { 


     realm.close(); 

    } 
}); 

private RealmConfiguration initalizeRealmConfig(){ 


     if(realmConfiguration == null) 
      return realmConfiguration = new RealmConfiguration.Builder(mContext) 
            .name(DB_NAME) 
            .schemaVersion(DB_VERSION) 
            .build(); 
     else return realmConfiguration; 

    } 

    public Realm getRealm(){ 


     return Realm.getInstance(initalizeRealmConfig()); 

    } 

我使用IntentService後臺數據庫操作和互聯網服務的時候我調用上面的代碼從活動onSuccess被調用,但我真的不想從活動稱之爲按規定要求。

回答

0

我認爲原因是您正在IntentService中執行異步事務,並且可能IntentService在結果準備好之前關閉。因爲IntentService在後臺線程上運行,所以在任何情況下都不需要異步事務。

只是在做下面的應該是相同的:

realm.executeTransaction(new Realm.Transaction() { 
    @Override 
    public void execute(Realm realm) { 
    // work 
    } 
}); 
realm.close(); 
+0

所以你的意思是我不需要從'IntentService'打電話了嗎? – Hunt

+0

你這樣做,但你不需要IntentService內部的異步事務。您可以選擇使用異步事務而不使用IntentService。 –

+0

有什麼方法可以使用IntentService和異步事務 – Hunt

相關問題