更新查询时出现错误。这是我得到的错误。领域查询不更新android
java.lang.IllegalStateException:从不正确的线程访问域。领域对象只能在创建它们的线程上访问。
这是我正在使用IntentService代码:
public void addPatient(Intent intent){
long patientID = intent.getLongExtra("id",0);
Log.v(Constants.TAG, "patientId in datasync " + patientID);
Realm real;
real = Realm.getDefaultInstance();
if(patientID > 0){
Patient patient = realm.where(Patient.class).equalTo("id",patientID).findFirst();
if(patient != null){
JsonObject patientObject = new JsonObject();
patientObject.add("patient",patient.toJsonObject());
Log.v(Constants.TAG, "patientData " + patient.toJsonObject());
try {
// Simulate network access.
Log.e(Constants.TAG, "addPatient: appointment ! =null "+patient);
mNetworkSubscription = NetworkRequest.performAsyncRequest(api.addPatient(patientObject), (data) -> {
// Update UI on main thread
try {
Log.v(Constants.TAG, "result sdsffgfg" + data.getAsJsonObject().get("result"));
if (data.getAsJsonObject().get("error") != null) {
publishResults("addPatient", STATUS_ERROR, null);
}
if (data.getAsJsonObject().get("result") != null) {
int serverID = data.get("result").getAsInt();
Log.v(Constants.TAG, "patientServerId " + serverID);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
patient.setServerID(serverID);
realm.copyToRealmOrUpdate(patient);
Log.v(Constants.TAG, "fdfdfdg " + patient);
}
});
}
} catch (Exception e) {
Log.v(Constants.TAG, "addPatient() exception: " + e.toString());
publishResults("addPatient", STATUS_ERROR, null);
} finally {
publishResults("addPatient", STATUS_FINISHED, null);
}
}, (error) -> {
// Handle Error
Log.e(Constants.TAG, "addPatient Error: " + error.toString());
publishResults("addPatient", STATUS_ERROR, null);
});
} catch (Exception e) {
Log.e(Constants.TAG, "addPatient() Exception: " + e.toString());
publishResults("addPatient", STATUS_ERROR, null);
}
}
}
}
请检查我要去的地方错了。我无法保存查询中的详细信息
您是否缺少'runOnUiThread()'? –
我应该在哪里添加? – winchester100
那么,你的评论说'更新主线程上的UI'。这实际上是在“主线程”上运行吗? Realm似乎并不这么认为 –