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