Как эта функция может генерировать исключение Java.Lang.NullPointerException? - PullRequest
0 голосов
/ 22 мая 2018

Я получаю случайные сбои от некоторых пользователей.Это происходит с небольшим меньшинством пользователей, но я не могу понять, что в этом коде будет работать примерно в 99% случаев, а остальные 1% не будут работать.

Это сбой, как сообщает Google Play:

java.lang.NullPointerException:
1. на com.raptisoft.SB.SBActivity.IsPurchased (неизвестный источник: 13)
2. на com.raptisoft.SB.GameThread.AppThread (Собственный метод)
3. at com.raptisoft.SB.GameThread.run (неизвестный источник: 2)
4. at java.lang.Thread.run (Thread.java:784)

А вот функция, в которой происходит сбой:

Bundle mOwnedItems; // Filled elsewhere

private boolean IsPurchased(String theData)
{
    if (theData==null) return false;
    boolean aResult=false;
    if (mOwnedItems.size()>0) if (mOwnedItems.containsKey("RESPONSE_CODE"))
    {
        int response = mOwnedItems.getInt("RESPONSE_CODE");
        if (response == 0 && mOwnedItems.containsKey("INAPP_PURCHASE_ITEM_LIST"))
        {
            ArrayList<String> ownedSkus = new ArrayList<String>();
            ownedSkus = mOwnedItems.getStringArrayList("INAPP_PURCHASE_ITEM_LIST");
            if (ownedSkus!=null) {
                for (int i = 0; i < ownedSkus.size(); ++i) {
                    String sku = ownedSkus.get(i);
                    if (sku.equals(theData)) {
                        aResult = true;
                        break;
                    }
                }
            }
        }
    }
    return aResult;
}

... которая, в свою очередь, вызывается из этой функции в собственном коде:

bool ToJava::IsPurchased(char* theData)
{
    if (theData==NULL) return false;

    JNIEnv* threadEnv=GetEnv();
    jstring aPassString = threadEnv->NewStringUTF(theData);
    jboolean aResult=threadEnv->CallBooleanMethod(g_theGlobalRefToActivityInstance,gIsPurchasedBridge,aPassString);
    threadEnv->DeleteLocalRef(aPassString);

    return (aResult!=0);
}

Я преследовал это падениев течение двух недель, добавляя все больше и больше защитных функций - и все же это все еще происходит.Я только средние на Java, так как мой предпочтительный язык - C ++.Может ли кто-нибудь объяснить мне, что может быть нулевым в этой функции?

...