Android getContext()不';当片段未附加时,是否返回null?
Android getContext()不';当片段未附加时,是否返回null?,android,android-fragments,Android,Android Fragments,片段中的异步任务,用于在应用突然关闭时使我的应用崩溃。执行后代码已运行(例如,显示Toast),但不再有应用程序 我想我通过检查getContext()!=在运行post execute代码之前为null,但我遇到了另一个崩溃 java.lang.IllegalStateException: at android.support.v4.app.Fragment.requireContext (Fragment.java:614) at android.support.v4.app.Fra
片段中的异步任务,用于在应用突然关闭时使我的应用崩溃。执行后代码已运行(例如,显示Toast
),但不再有应用程序
我想我通过检查getContext()!=在运行post execute代码之前为null,但我遇到了另一个崩溃
java.lang.IllegalStateException:
at android.support.v4.app.Fragment.requireContext (Fragment.java:614)
at android.support.v4.app.Fragment.getResources (Fragment.java:678)
at android.support.v4.app.Fragment.getString (Fragment.java:700)
at com.grammarbud.android.grammarbud.MainFragment$2.onBillingServiceDisconnected (MainFragment.java:310)
我读到了
片段现在有requireContext()、requireResponsibility()、requireHost()和requireRefragmentManager()方法,这些方法返回等效get方法的非空对象或抛出IllegalStateException
这是否意味着getContext()
不再返回null
?那么下面的摘录是什么意思呢?当未附加到活动时,它是否返回null
?我不懂这种语言
getActivity和getContext方法返回可为null的类型,因为当片段未附加到活动时,这些方法已返回null。行为没有变化,只是现在显式标记了,所以您可以安全地处理它
我的代码,在片段中运行
private void connectToPlayStore() {
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {
if (billingResponseCode == BillingClient.BillingResponse.OK) {
if (getContext() != null) {
queryProductDetails();
}
}
}
@Override
public void onBillingServiceDisconnected() {
// Line below ***CRASHES*** app if closed prematurely
SharedHelper.showToast(getContext(), getString(R.string.no_connection_to_play_store));
}
}
});
}
用于显示Toast的SharedHelper
函数,如果上下文为null
,则会捕获该函数,但在我看来,执行并没有走到这一步
public static void showToast(Context context, String message) {
if (context != null) {
Toast newToast = Toast.makeText(context, message, Toast.LENGTH_LONG);
showToast(newToast);
}
}
那么,当异步任务在片段中运行并且应用程序突然关闭时,如何正确地提供场景?我是否应该尝试结束与BillingClient.endConnection()的连接?这能保证执行后代码不会运行吗?它并没有明确地说
还有人提到isAdded()
。我应该选择isAdded()
而不是getActivity()!=null&&getContext()!=null
?getContext()在片段未附加时不返回null。。。你为什么这么想?显然问题不在于getContext()
,而在于getString(…)
你完全正确!!问题是getString()
。出于某种原因,我假设问题出在getContext()
,但这是错误的。非常感谢你指出这一点!!!我自己也不会意识到我如此专注于getContext()