Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java success handler中的First finish()工作正常,second finish()不工作';T_Java_Android_Android Activity_Activity Finish - Fatal编程技术网

Java success handler中的First finish()工作正常,second finish()不工作';T

Java success handler中的First finish()工作正常,second finish()不工作';T,java,android,android-activity,activity-finish,Java,Android,Android Activity,Activity Finish,在过去的6个小时里,我一直在想下面的问题,但我想不出来。我相信这应该是一个很容易解决的问题,但不知何故它不是 我使用具有多个完成处理程序的,其中一个是onSuccess()。我的成功处理程序的代码如下所示: @Override public void onSuccess(String json) { // {"statusId":12,"statusText":"Ongeldige logincode","result":[],"duration":"0.320","update":[]

在过去的6个小时里,我一直在想下面的问题,但我想不出来。我相信这应该是一个很容易解决的问题,但不知何故它不是

我使用具有多个完成处理程序的,其中一个是
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()
调用永远不起作用

我应该注意到,我的emulator在这第二次
finish()
调用中似乎出现了一个小问题,但LogCat没有提到任何错误、警告等


第二个
finish()
为什么不关闭我的活动

在什么条件下更新不为空?在您当前正在运行的活动下方是否可能存在同一活动的第二个实例,因此顶级活动实际上正在完成,但它看起来不是这样,因为它返回的活动具有相同的布局?

您确定要将上次更新消息ID正确设置为SharedPrefs吗?我认为没有任何问题。在调试器中,我注意到当我有一个
update
对象并且updateId等于或小于lastId时,第二个
finish()
正在被调用(使用断点)。所以你的问题是,它正在被调用,但它没有关闭活动,对吗?确实如此。我确实注意到一个小“小问题”,但在第二次调用
finish()
时,活动永远不会结束。您是否尝试过使用活动上下文执行finish?我不知道onSuccess方法在哪里。如果它是单独的类,它可能看不到活动?只是提出一个想法。