使用改造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;
}
答案 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;
}