Проблемы с получением контекста

Я сделал приложение, которое работает с игровыми сервисами. Я тестировал свое приложение на 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. Проблема с этими устройствами или проблема в приложении?

Вот пример, когда я вызываю и передаю контекст 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.");
    }

person admiral    schedule 17.08.2015    source источник
comment
Может быть, опубликуйте реальный код, который выводит этот NullPointer.   -  person grizeldi    schedule 17.08.2015
comment
@adminral Откуда вдруг взялся mContext? Что такое функция logDebug? Опубликуйте соответствующий код для решения.   -  person Yuva Raj    schedule 17.08.2015
comment
Если вы передаете Context, то почему mContext = ctx.getApplicationContext();? Почему не mContext = ctx;? Вы редко должны действительно нуждаться в getApplicationContext(). Особенно, когда вы уже проходите Context   -  person codeMagic    schedule 17.08.2015


Ответы (2)


У вас есть такая же проблема, если вы используете следующее:

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

ИЗМЕНИТЬ Я заметил ошибку в вашем классе:

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

Вы уверены, что сохранили контекстную переменную в конструкторе IabHelper и используете ту же переменную в queryPurchases?

ИЗМЕНИТЬ2

logDebug("Имя пакета: " + mContext.getPackageName());

mContext имеет значение null в классе — вам нужно убедиться, что вы установили его в конструкторе IabHelper.

person Quintin Balsdon    schedule 17.08.2015
comment
Проблема в том, что это была та же проблема с getActivity (), единственное, чего я не понимаю, это сломанное устройство или плохой код ??? - person admiral; 17.08.2015

попробуй getActivity().getApplicationContext();

person kc ochibili    schedule 17.08.2015