2016-04-09 13 views
0

から呼び出さ取得されていない私はexecuteTransaction機能を使用してRealmでレコードを更新しようとしていますが、私はIntentServiceからのコードのこの部分を呼び出すときに、Ream.Transaction.CallbackonSuccesscopyToRealmOrUpdateを呼び出した後に自動的に呼び出さなっていません。する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()); 

    } 

私が呼び出されるonSuccess活動からのコードの上に呼び出したとき、私は、バックグラウンドDB操作やWebサービスの呼び出しのためIntentServiceを使用していますが、私は本当に要件ごとにActivityからそれを呼び出したいいけません。

答えて

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