gpt4 book ai didi

java - Volley onErrorResponse getString 偶尔返回 null

转载 作者:行者123 更新时间:2023-12-02 11:47:56 26 4
gpt4 key购买 nike

如果有人可以分享这个看似简单问题的解决方案,那就太好了,因为当我的应用程序在简单 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)

我确保使用以下函数初始化ActivitysActivity变量,该函数在onAttach<的每个生命周期调用中调用/em> 确保其可用:

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 以及如何确保应用程序不会崩溃,但我需要从 String 获取动态值运行时的资源会有所不同。

根据我收集的信息, Activity 实例可能会因使用异步网络调用而发生变化,从而导致此问题。我也考虑过单独使用 getString() 以及 getResources().getString(),但我不确定这是否会阻止问题的出现.

最佳答案

您不应该将 Activity 传递给 fragment 并以这种方式存储它,这可能是问题的原因。只需从 fragment 内部使用 getActivity() 即可。

此外,您的 setActivity 代码不一定保证 sActivity 不会为 null。如果所有 3 个条件都为空,会发生什么?没有最后的 else 来捕获所有 3 个都为空的情况。另外,当 fragment/Activity 不断膨胀时,Android 有时会很时髦。在 OnAttach 时,这 3 个变量很可能都为空。无论哪种方式,如果您在 OnCreate 中或在 Fragment 完全膨胀后使用它,getActivity() 应该返回您需要的内容。您不应该有 Activity 变量,因为 getActivity 正是您所需要的,当 Activity 发生变化但您尝试在内存中存储旧版本的 Activity 并尝试调用方法时会发生什么?

此外,请使用 getResources().getString(),因为您是从字符串资源中获取字符串。

总而言之,您的代码行应该如下所示(不需要 setActivity 方法或 sActivity 变量)。

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

已经有一段时间了,如果这对您不起作用,请告诉我,我可以尽力为您提供进一步帮助。

关于java - Volley onErrorResponse getString 偶尔返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48068101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com