我一直試圖圍繞下面的問題圍繞過去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":"[email protected]","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()
關閉我的活動?
您確定您將LAST_UPDATE_MESSAGE_ID正確設置爲SharedPrefs嗎? – 2013-02-26 16:09:57
我不認爲那裏有任何問題。在調試器中,我注意到當我有一個'update'對象並且updateId與lastId相等或更小時,第二個'finish()'被調用(使用斷點)。 – 2013-02-26 16:12:58
所以你的問題是它被調用,但它沒有關閉活動,對吧? – 2013-02-26 16:19:00