2016-11-10 52 views
0

我使用的是來自Intent服務和UI的Realm數據庫,因爲它是庫的一部分,我無法調用或設置Realm的默認值,因此我使用Realm檢索領域.getInstance(config)爲每個意圖,並且因爲我不能重用領域不知道我將在哪個線程上運行我也不能使用異步寫入。意向服務的領域同步寫入

這樣我每一次我寫了創紀錄的

「混合與地方寫入異步查詢應避免正在以下錯誤。域將轉換任何異步查詢,以保持一致的同步。使用異步寫入代替。」

我假設「本地寫道」作者的意思是「同步」?

根據我對這種情況下領域利用率的理解,我不相信會有其他選擇嗎?

上午我理解從一個Intent服務的情況寫對象的正確方法正確的是:

Realm realm = getNewRealmInstance(); 
try { 
    realm.beginTransaction(); 
    Record newRecord = new Record().setField1(x).setField2(y); 
    realm.copyToRealm(newRecord); 
    realm.commitTransaction(); 
} catch (Throwable error) { 
    realm.cancelTransaction(); 
} finally { 
    realm.close(); 
} 

此外,我正在以下日誌消息(無例外拋出)

E/REALM_JNI: jni: ThrowingException 7, std::exception in /Users/zaki/fromgit/realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_TableQuery.cpp line 1285, . 
E/REALM_JNI: Exception has been throw: std::exception in /Users/zaki/fromgit/realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_TableQuery.cpp line 1285 

回答

1

「混合與地方寫入異步查詢應儘量避免。這個領域將轉換任何異步查詢,以同步的,以保持一致,改用異步寫入。「

如果您在UI線程上執行同步寫入,則只會出現此警告。當然,你可以確保你不寫在UI線程上?


本工程爲目的服務:在自己的線程不能在根據Android文檔的UI線程中運行,

Realm realm = getNewRealmInstance(); 
try { 
     realm.executeTransaction(new Realm.Transaction() { 
      public void execute(Realm realm) { 
       Record newRecord = new Record().setField1(x).setField2(y); 
       realm.insert(newRecord); 
      } 
     }); 
} finally { 
     realm.close(); 
} 
+0

意向服務,另外,這是相同的,因爲我問了一下代碼除非沒有發現異常。 – Kenny

+0

這真是太棒了,但是你真的有'onHandleIntent()'這個代碼片段嗎? – EpicPandaForce