我有這個查詢來更新已經在我的領域表中的數據;使用RxJava異步Android界面更新
for (MyGameEntrySquad squad : response.body().getSquad()) {
subscription = realm.where(RealmPlayer.class).equalTo("id", squad.getPlayer().getId())
.findFirstAsync()
.asObservable()
.subscribe(new Action1<RealmObject>() {
@Override
public void call(RealmObject realmObject) {
}
});
}
我想異步執行此查詢,然後在UI上顯示結果。
基本上,response.body()。getSquad()有一個id與已經在DB中的記錄相匹配;這就是我在equalTo方法中使用的內容。
根據收到的數據,我想更新每個匹配ID的記錄的兩列。
不過,我對這個面臨着一些挑戰:
- 的措施1在訂閱的,而不是返回RealmObject一個PlayerObject的
- 如何從這裏
上的任何指導進行這將不勝感激。
感謝
更新
if (response.isSuccessful()) {
//asynchronously update the existing players records with my squad i.e is_selected
for (MyGameEntrySquad squad : response.body().getSquad()) {
realm.where(RealmPlayer.class).equalTo("id", squad.getPlayer().getId())
.findFirstAsync()
.<RealmPlayer>asObservable()
.filter(realmPlayer -> realmPlayer.isLoaded())
.subscribe(player -> {
realm.beginTransaction();
if (squad.getPlayer().getPosition().equals("GK")) {
player.setPlaygroundPosition("gk");
player.setIsSelected(true);
}
// pick the flex player
if (squad.isFlex()) {
player.setPlaygroundPosition("flex");
player.setIsSelected(true);
}
// pick the Goalie
if (squad.getPlayer().getPosition().equals("GK")) {
player.setPlaygroundPosition("gk");
player.setIsSelected(true);
}
// pick the DFs
if ((squad.getPlayer().getPosition().equals("DF")) && (!squad.isFlex())) {
int dfCounter = 1;
player.setPlaygroundPosition(String.format(Locale.ENGLISH, "df%d", dfCounter));
player.setIsSelected(true);
dfCounter++;
}
// pick the MFs
if ((squad.getPlayer().getPosition().equals("MF")) && (!squad.isFlex())) {
int mfCounter = 1;
player.setPlaygroundPosition(String.format(Locale.ENGLISH, "mf%d", mfCounter));
player.setIsSelected(true);
mfCounter++;
}
// pick the FWs
if ((squad.getPlayer().getPosition().equals("FW")) && (!squad.isFlex())) {
int fwCounter = 1;
player.setPlaygroundPosition(String.format(Locale.ENGLISH, "mf%d", fwCounter));
player.setIsSelected(true);
fwCounter++;
}
realm.copyToRealmOrUpdate(player);
realm.commitTransaction();
updateFieldPlayers();
});
}
hideProgressBar();
}
那麼你什麼時候取消訂閱你的用戶?你**做**取消訂閱,對吧?你在哪裏「更新兩列」?你如何顯示對象(是一個RecyclerView或其他東西)?這個示例代碼運行在哪個線程上?目前沒有足夠的數據可以正確回答這個問題。 – EpicPandaForce
嗨@EpicPandaForce,我面臨的挑戰之一就是從那一點開始,這就是爲什麼有些信息丟失的原因。我在編輯原始問題以顯示目前在哪裏 –
@EpicPandaForce是我退訂;在onDestroy()函數中。我現在使用TableLayout –