代码之家  ›  专栏  ›  技术社区  ›  Raptisoft

此函数如何生成Java.Lang.NullPointerException?

  •  0
  • Raptisoft  · 技术社区  · 6 年前

    这是Google Play报道的崩溃:

    java.lang.NullPointerException异常:


    3.访问com.raptisoft.SB.GameThread.run(未知)ource:2)

    下面是它崩溃的函数:

    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++。有人能告诉我这个函数中什么是空的吗?

    0 回复  |  直到 6 年前