Volley onErrorResponse getString偶尔返回null
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Volley onErrorResponse getString偶尔返回null相关的知识,希望对你有一定的参考价值。
如果有人可以共享这个看似简单的问题的解决方案,那就太好了,因为我的应用程序在尝试使用我的应用程序中的以下行在简单的Volley请求的onErrorResponse部分中获取字符串资源时崩溃:
mTextView.setText(sActivity.getString(R.string.connection_error,
customMessageParameter));
这个问题似乎只发生在一些用户身上(尽管我自己试图复制崩溃),这是通过Fabric报告的,即以下内容:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual
method 'java.lang.String android.content.Context.getString(int)' on a null
object reference at
com.appname.MyFragment$13.onErrorResponse(MyFragment.java:651)
我确保使用以下函数初始化Activity sActivity变量,该函数在onAttach的每个生命周期调用中调用,以确保它可用:
private void setActivity(Activity activity, Context context) {
if (activity != null) {
sActivity = activity;
} else if (getActivity() != null) {
sActivity = getActivity();
} else if (context != null) {
sActivity = (Activity) context;
}
}
我理解如何检查getString()调用事先不等于null以及如何确保应用程序不会崩溃,但我需要在运行时从字符串资源中获取动态值,这些值会有所不同。
根据我收集的内容,活动实例可能会因异步网络调用而异,从而导致此问题。我也考虑过单独使用getString()以及getResources()。getString(),但我不确定这是否会阻止问题的产生。
您不应该将活动传递给片段并以此方式存储,这可能是您的问题的原因。只需从片段内部使用getActivity()
。
此外,您的setActivity代码不能保证sActivity
不会为null。如果所有3个条件碰巧都为空,会发生什么?没有最后的其他方法来捕捉所有3都为空的情况。此外,Android可能有时候很有趣,而片段/活动正在膨胀。在OnAttach时,所有这三个变量都很有可能是空的。无论哪种方式,如果你在OnCreate中使用它或者片段完全膨胀后,getActivity()
应该返回你需要的东西。你不应该有一个活动变量,因为getActivity完全符合你的需要,当活动发生变化时会发生什么,但是你有一个旧版本存储在内存中你尝试调用方法?
此外,使用getResources().getString()
,因为您从字符串资源中获取字符串。
总而言之,您的代码行应该是这样的(不需要您的setActivity
方法或sActivity
变量)。
getActivity().getResources().getString(R.string.connection_error)
已经有一段时间了,所以请告诉我这是否对您不起作用,我可以尝试进一步帮助您。
以上是关于Volley onErrorResponse getString偶尔返回null的主要内容,如果未能解决你的问题,请参考以下文章
error.networkResponse 为空时 Android Volley 中的 Http 状态代码