我正在通过凌空进行网络呼叫。响应成功后,我正在尝试通过 SnappyDb 存储数据,这表明它已成功存储。但是在读取任何数据时不存在。但是,如果我有响应之外的数据,那么它也会保存和读取。下面是我的代码。在过去的两天里,我正在为此苦苦挣扎。您的帮助将不胜感激。谢谢
private void makeApiCall(String key) {
if (Utility.isNetworkAvailable(AddCustomerActivity.this)) {
final String finalKey = key;
showProgressDailog("Adding...");
NetworkEb.apiCallAddUser(customerEb, (key != null && !key.contains(":"))? true : false, new OnJsonResponse() {
@Override
public void onSuccess(JSONObject response) {
try {
int serverId = response.getInt("id");
customerEb.setKey(serverId + "");
customerEb.setSync(true);
snappyDbUtil.saveObjectFromKey("customer", DbName.CUSTOMER.name(), customerEb);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(String response) {
Utility.showToast("Upload failed! Try Again");
progressDialog.dismiss();
}
});
} else {
if (key == null) {
key = snappyDbUtil.getNewKey(DbName.CUSTOMER.name());
customerEb.setKey(key);
customerEb.setSync(false);
Utility.showToast("Saved locally");
}
snappyDbUtil.saveObjectFromKey(key, DbName.CUSTOMER.name(), customerEb);
}
}
我为此找到了解决方案。您需要通过调用以下命令将数据保存在 UI 线程中
runOnUiThread(new Runnable() {
@Override
public void run() {
itemDataModel.setKey("ITEMS:" + key);
itemDataModel.setSync(true);
snappyDbUtil.saveObjectFromKey(itemDataModel.getKey(), DbName.ITEMS.name(), itemDataModel);
}
});
在这里,您还必须注意要存储的密钥,只有在我们提供数据库名称时才保存这些密钥,如上面的代码所示。