java.lang.IllegalStateException:片段内的getResources()。getString-崩溃

时间:2019-09-17 08:52:22

标签: java android

使用改造2从后端获取数据时,如果收到错误数据,则应用程序崩溃了。

li
  

显示此错误的日志猫

private String fetchErrorMessage(Throwable throwable) {
    String errorMsg = getResources().getString(R.string.error_msg_unknown);

    if (!isNetworkConnected()) {
        errorMsg = getResources().getString(R.string.error_msg_no_internet);
    } else if (throwable instanceof TimeoutException) {
        errorMsg = getResources().getString(R.string.error_msg_timeout);
    }

    return errorMsg;
}

5 个答案:

答案 0 :(得分:0)

请使用上下文以避免。您可以按getActity()的形式使用它,也可以使用应用程序上下文

private String fetchErrorMessage(Throwable throwable) {

    String errorMsg = getResources().getString(R.string.error_msg_unknown);

    if (!isNetworkConnected()) {
        if (getActivity() != null){
        errorMsg = getActivity().getResources().getString(R.string.error_msg_no_internet);
        }
    } else if (throwable instanceof TimeoutException) {
        if (getActivity() != null){
        errorMsg = getActivity().getResources().getString(R.string.error_msg_timeout);
       }
    }

    return errorMsg;
}

答案 1 :(得分:0)

请尝试获取这样的片段上下文:

getActivity().getResources().getString(R.string.error_msg_unknown)

答案 2 :(得分:0)

尝试一下

private String fetchErrorMessage(Throwable throwable) {
String errorMsg = getActivity().getResources().getString(R.string.error_msg_unknown);

if (!isNetworkConnected()) {
    errorMsg = getActivity().getResources().getString(R.string.error_msg_no_internet);
} else if (throwable instanceof TimeoutException) {
    errorMsg = getActivity().getResources().getString(R.string.error_msg_timeout);
}

return errorMsg;}

答案 3 :(得分:0)

用户可能已经通过单击返回或导航到其他片段离开了该片段,并且该片段未附加到活动,因此requireContext失败。您可以通过检查getActivity() == null

来检查是否附加了片段

答案 4 :(得分:0)

检查文档。
方法getResources()使用requireContext(),它返回等效的get方法的NonNull对象或抛出IllegalStateException

使用isAdded()方法检查该片段当前是否已添加到其活动中。

类似的东西:

if (isAdded()){
   //your implementation....
   getResources().getString(R.string.error_msg_unknown);
}

请注意:isAdded()getActivity()!=null是不同的。您可以检查实施情况:

/**
 * Return true if the fragment is currently added to its activity.
 */
final public boolean isAdded() {
    return mHost != null && mAdded;
}