Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.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
Android 在DialogFragment中更改布局时发生IllegalStateException_Android - Fatal编程技术网

Android 在DialogFragment中更改布局时发生IllegalStateException

Android 在DialogFragment中更改布局时发生IllegalStateException,android,Android,当我做一些布局更改时,我在DialogFragment中的一些设备上得到一个非法状态异常。在我的DialogFragment中,我通过截取从JSON获取一些数据,当出现ResponseError时,我想更改一些视图。例如,这是我的视图更改方法: private void showErrorLayout() { mProgressBar.setVisibility(View.INVISIBLE); mText.setVisibility(View.VISIBLE);

当我做一些布局更改时,我在DialogFragment中的一些设备上得到一个非法状态异常。在我的DialogFragment中,我通过截取从JSON获取一些数据,当出现ResponseError时,我想更改一些视图。例如,这是我的视图更改方法:

private void showErrorLayout() {
        mProgressBar.setVisibility(View.INVISIBLE);
        mText.setVisibility(View.VISIBLE);
        mText.setText(getString(R.string.volley_firmware_update_error));
}
这是我截击的方法:

private void checkVersionNetwork() {
    final int fw = sharedPreferencesManager.loadFirmwareVersion();
        JsonObjectRequest request = new JsonObjectRequest(
                Request.Method.GET, JSON_LINK, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONObject object = response.getJSONObject(OBJECT);
                    JSONObject changelogObject = response.getJSONObject(CHANGELOG_OBJECT);

                    if (fw >= Integer.parseInt(object.getString(JSON_FIRMWARE_VERSION))) {
                        Log.i(LOG_TAG, "onResponse: FIRMWARE IS UP TO DATE");
                        mText.setText(R.string.firmware_most_recent);
                        mButton.setText(R.string.sb_ok);
                        btnClose.setVisibility(View.INVISIBLE);
                        mText.setVisibility(View.VISIBLE);
                        mButton.setVisibility(View.VISIBLE);
                        mProgressBar.setVisibility(View.INVISIBLE);

                    } else {
                        Log.i(LOG_TAG, "onResponse: FIRMWARE IS OUT OF DATE");

                        if (Locale.getDefault().getLanguage().equals("en")) {
                            mText.setText(getString(R.string.firmware_need_download) + "\n" + getString(R.string.changes) + "\n" + changelogObject.getString(JSON_FIRMWARE_CHANGELOG_TEXT_ENG));
                        } else if (Locale.getDefault().getLanguage().equals("de")) {
                            mText.setText(getString(R.string.firmware_need_download) + "\n" + getString(R.string.changes) + "\n"  + changelogObject.getString(JSON_FIRMWARE_CHANGELOG_TEXT_GER));
                        }
                        mText.setVisibility(View.VISIBLE);
                        mButton.setVisibility(View.VISIBLE);
                        mProgressBar.setVisibility(View.INVISIBLE);
                        downloadLink = object.getString("url");
                        Log.i(LOG_TAG, "onResponse: " + downloadLink);
                        mButton.setText(getContext().getResources().getString(R.string.download));
                    }
                    Log.i("RESPONSE", object.getString(JSON_FIRMWARE_VERSION));
                } catch (JSONException | NullPointerException e) {
                    e.printStackTrace();
                    showErrorLayout();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e("VOLLEY", error.toString());
                showErrorLayout();
            }
        }
        );

        mRequestQueue.add(request);
    //}
}

HTTP请求完成后,调用onResponse或onError,它们在主线程上工作,而不知道活动是否仍在前台。如果用户导航到其他位置时活动消失,getActivity将返回null,并检查DialogFragment是否已添加

此行出错,请尝试此操作

if(getActivity()!=null && isAdded()) {
    mText.setText(getActivity().getResources().getString(R.string.volley_firmware_update_error));
}
if(getActivity()!=null && isAdded()) {
    mText.setText(getActivity().getResources().getString(R.string.volley_firmware_update_error));
}