获取上下文的问题

时间:2015-08-17 17:34:07

标签: android android-activity android-context

我制作了一个适用于播放服务的应用程序。我在HTC 310,nexus,lenovo p780和其他一些设备上测试了我的应用程序。它根本不会崩溃。我已经安装了Crashlytics并收到了一些奇怪的崩溃报告:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
       at com.preferences.iaps.IabHelper.queryPurchases(IabHelper.java:829)
       at com.preferences.iaps.IabHelper.queryInventory(IabHelper.java:557)
       at com.preferences.iaps.IabHelper.queryInventory(IabHelper.java:521)
       at com.preferences.iaps.IabHelper$2.run(IabHelper.java:614)
       at java.lang.Thread.run(Thread.java:818)

我从像S4,s5这样的samsungs那里得到了这个错误。这些设备是否有问题或应用程序出现问题?

以下是我调用并向Iabhelper传递上下文的示例:

   @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            mActivity = activity;
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setRetainInstance(true);

            mHelper = new IabHelper(mActivity, base64EncodedPublicKey);
            mHelper.enableDebugLogging(true);
            mHelper.startSetup(this);
        }

这是导致抛出空指针异常的原因:(第829行):

 logDebug("Package name: " + mContext.getPackageName());

这是我获取上下文的地方(同一类错误)

public IabHelper(Context ctx, String base64PublicKey) {
        mContext = ctx.getApplicationContext();
        mSignatureBase64 = base64PublicKey;
        logDebug("IAB helper created.");
    }

2 个答案:

答案 0 :(得分:2)

如果您使用以下内容,是否会遇到同样的问题:

mHelper = new IabHelper(getActivity(), base64EncodedPublicKey);

修改 我注意到你班上的错误:

  

com.preferences.iaps.IabHelper.queryPurchases(IabHelper.java:829)

如果是IabHelper,你确定在构造函数中持有了上下文变量,并且在queryPurchases中使用了相同的变量吗?

<强> EDIT2

  

logDebug(“包名称:”+ mContext.getPackageName());

mContext在类中为null - 您需要确保在IabHelper的构造函数中设置它

答案 1 :(得分:0)

尝试getActivity().getApplicationContext();