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()