在我的應用程序中運行基於領域結果的複雜算法並在可展開的列表視圖中顯示結果。由於該算法有點沉重,我決定在Asynctask中完成,並在listview onPostExecute中顯示結果。領域不能跨線程訪問,所以我打開並關閉了我自己的localRealm實例。我已經檢查了這段代碼,並且在棒棒糖,kitkat,jellybean設備中一切都很順利。但是在特定的kitkat設備查詢結果中返回null。由於棒棒糖設備中的所有工作都很完美,所以我發現它更難以理解它爲什麼不這樣做在那個設備裏。我的代碼如下,我從Asynctask doInBackground方法調用此方法。Realm查詢在kitkat設備中的asynctask中返回null
Realm localRealm = Realm.getInstance(RealmUtility.getRealmConfig(mContext));
try {
TotalTransaction totalTransaction = localRealm.where(TotalTransaction.class).equalTo("pk", totalTransactionPk).findFirst(); // returning null so doesn't enter inside if block
if (totalTransaction != null && totalTransaction.isLoaded()) {
// run algorithm and other related works based on realm results
} catch (Exception e) {
e.printStackTrace();
} finally {
if (localRealm != null) localRealm.close();
}
和我gradle這個配置:
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig {
applicationId 'com.***.***'
minSdkVersion 15
targetSdkVersion 23
versionCode 5
versionName '1.1.5'
multiDexEnabled true
}
而且我知道有關領域的新findAllAsync和findFirstAsync方法,但我的查詢結果是相當短,使用內部的AsyncTask由於根據查詢結果繁重的計算。
境界版本:1.1.0 機器人工作室:2.1.2 的java:1.7
測試設備:
- 棒棒糖:三星J1 NXT,三星J2,三星S6,索尼Z3
- Kitkat:Samsung Note2,Symphony Xplorer W69Q
- 軟糖豆:Walton primo
- 問題Kitkat設備:Samsung Ace Nxt(FYI everythi ng其他除此查詢以外的應用程序正常運行,但所有其他查詢都在主線程中)
您可以請驗證,如果您在交易中執行此查詢,那麼即使在三星Ace Nxt上它也會返回適當的值? – EpicPandaForce
@EpicPandaForce:我沒有做任何寫,然後我會在事務內部調用查詢嗎?事務塊用於寫入事務[https://realm.io/docs/java/latest/#writes] – sbr1308
只是爲了驗證通過強制您的Realm成爲最新版本(通過在事務中執行您的算法),然後數據實際上是可用的。爲此,在'doInBackground()'中使用'realm.executeTransaction()'。 – EpicPandaForce