在过去的6个小时里,我一直试图围绕以下问题,但我无法弄明白。我认为它应该是一个容易解决的问题,但不知何故它不是。
我使用Async HTTP library,它有几个完成处理程序,其中一个是onSuccess()
。我的成功处理程序的代码如下所示:
@Override
public void onSuccess(String json) {
// {"statusId":12,"statusText":"Ongeldige logincode","result":[],"duration":"0.320","update":[]}
// {"statusId":1,"statusText":"OK","result":{"id":"38790","planHash":"0FYzJAodmQzUnZkSEJzWVc1dWFXNW5KbXhzYm5WdFBUTTROemt3","warnCBR":"NO","data":{"name":"Jeroen Dielemans","mail":"j.dielemans@live.nl","address":"Oude Antwerpse Postbaan 6","zip":"4741TK","city":"Hoeven","phone":"0165-502684","mobile":"06-15617390"}},"duration":"1.538","update":[]}
json = "{\"statusId\":1,\"statusText\":\"OK\",\"result\":[],\"duration\":\"3.910\",\"update\":{\"id\":22,\"title\":\"Update!\",\"text\":\"Hee er is een nieuwe versie ;)\",\"button\":\"Open\",\"link\":\"market:\\/\\/details?id=com.dga.blom>\"}}";
Integer statusId = 1; // 1 == success
String statusText = null;
JSONObject result = null;
JSONObject update = null;
try {
JSONObject object = (JSONObject) new JSONTokener(json)
.nextValue();
statusId = object.getInt("statusId");
statusText = object.getString("statusText");
result = object.optJSONObject("result");
update = object.optJSONObject("update");
} catch (JSONException e) {
e.printStackTrace();
}
if (statusId != 1) {
showAlertDialog(getString(R.string.failed), statusText);
} else {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
getCurrentFocus().getWindowToken(), 0);
if (result != null) {
SharedPreferences prefs = getSharedPreferences(
Constants.SHARED_PREFS, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString(Constants.SHARED_PREFS_USER,
result.toString());
editor.commit();
Intent refreshIntent = new Intent(
Constants.INTENT_REFRESH_ACTION);
sendBroadcast(refreshIntent);
}
if (update == null) {
finish(); /* ALWAYS closes activity */
} else {
int updateId = update.optInt("id", -1);
SharedPreferences prefs = getSharedPreferences(
Constants.SHARED_PREFS, Context.MODE_PRIVATE);
int lastId = prefs.getInt(
Constants.LAST_UPDATE_MESSAGE_ID, -1);
if (updateId > lastId) {
showUpdateDialog(update);
} else {
finish(); /* NEVER closes activity */
}
}
}
}
我猜相关的代码片段接近尾声。
如果update
没有价值,我只需致电finish()
即可关闭活动。这总是很好。
如果update
的值存在,我将检查更新标识符是否永远不是最后存储的值。如果更新标识符确实更新,我将显示一个对话框。如果更新标识符不是更新,我会尝试通过调用finish()
关闭活动并继续使用该应用。第二次finish()
调用无效。
我应该注意,我的模拟器似乎在第二次finish()
调用时有一个小的打嗝,但LogCat没有提到任何错误,警告等。
为什么第二个finish()
关闭我的活动?
答案 0 :(得分:0)
在什么条件下更新不为空?在您当前正在运行的活动下面是否存在同一活动的第二个实例,因此顶级活动实际上已完成,但它看起来不像,因为它返回的活动具有相同的布局?