2012-12-16 23 views
7

एंड्रॉइड के लिए ऐप बिलिंग v3 में परीक्षण करने के लिए मैंने एक संवाद लागू किया जो एक ही विकल्प आइटम एडाप्टर जोड़ता है। मैंने टेस्ट स्कस जोड़ा है, "android.test.purchased", "android.test.canceled", "android.test.refunded", "android.test.item_unavailable"।ऐप बिलिंग v3 में NullPointerException

जब मैं खरीद प्रवाह लॉन्च करने के लिए संवाद का उपयोग करता हूं तो सब ठीक है, मैं आइटम खरीदने में सक्षम हूं और आइटम सबसे निश्चित रूप से खरीदा जाता है। हालांकि, जब मेरा ऐप यूआई रीफ्रेश करने का प्रयास करता है तो मुझे एक nullpointerexception मिलता है। मुझे ताज़ा काम पता है।

12-16 01:06:06.706: I/Running inventory query with(20846): android.test.purchased 
12-16 01:06:06.706: I/Running details query with(20846): SkuDetails:{"title":"Sample Title","price":"£0.61","type":"inapp","description":"Sample description for product: android.test.purchased.","productId":"android.test.purchased"} 
12-16 01:06:06.706: I/Running details query with(20846): SkuDetails:{"title":"Sample Title","price":"£0.61","type":"inapp","description":"Sample description for product: android.test.purchased.","productId":"android.test.purchased"} 
12-16 01:06:06.706: I/Running inventory query with(20846): android.test.canceled 
12-16 01:06:06.706: I/Running details query with(20846): null 
12-16 01:06:06.706: I/Running details query with(20846): null 
12-16 01:06:06.706: D/AndroidRuntime(20846): Shutting down VM 
12-16 01:06:06.706: W/dalvikvm(20846): threadid=1: thread exiting with uncaught exception (group=0x40d12930) 
12-16 01:06:06.706: E/AndroidRuntime(20846): FATAL EXCEPTION: main 
12-16 01:06:06.706: E/AndroidRuntime(20846): java.lang.NullPointerException 
12-16 01:06:06.706: E/AndroidRuntime(20846): at com.example.test.MainActivity$1.onQueryInventoryFinished(MainActivity.java:201) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at com.example.test.util.IabHelper$2$1.run(IabHelper.java:536) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at android.os.Handler.handleCallback(Handler.java:725) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at android.os.Looper.loop(Looper.java:137) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at android.app.ActivityThread.main(ActivityThread.java:5039) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at java.lang.reflect.Method.invokeNative(Native Method) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at java.lang.reflect.Method.invoke(Method.java:511) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-16 01:06:06.706: E/AndroidRuntime(20846): at dalvik.system.NativeStart.main(Native Method) 

for (String s : allSkus) { 
Log.i("Running inventory query with", "" + s); 
SkuDetails c = inv.getSkuDetails(s); 
Log.i("Running details query with", "" + c); 
if (inv.hasPurchase(s)) { 
    purchaseArray.add(c.getTitle()); 
} else { 
    **LINE 201** objects.add(c.getPrice() + " T:" + c.getSku()); 
} 

allSkus एक ArrayList जो ऊपर 4 SKUs रखती है:

यहाँ मेरी logcat है।

नलपॉइंटर स्कूडेट्स सी = inv.getSkuDetails (ओं) है;

जो यूआई रीफ्रेश पर शून्य देता है। लेकिन मुद्दा यह है कि यह पहली स्कू (android.test.purchased) के लिए काम करता प्रतीत होता है लेकिन दूसरी स्कू (android.test.canceled) के लिए शून्य है और यह भी एक और आइटम खरीदने के बाद चला जाता है जब यह केवल शून्य है (धनवापसी या खरीदा गया)। हालांकि अगर मैं इसे फिर से खोलता हूं, तो यह ठीक है और कोई nullpointerexception फेंक दिया जाता है।

मैं ArrayList वस्तुओं, तो कोई आइटम के बाद या खरीदा आइटम से पहले हर आइटम के रूप में जुड़ जाते हैं में जोड़ने से पहले एक अशक्त जांच जोड़ने inv.getSkuDetails (ओं) पर अशक्त लौट रहा है, तो

+0

यह वास्तव में इतना आसान है जो मेरे जैसे नौसिखिया के लिए बहुत अच्छा है। सबसे पहले (मान लीजिए कि आप ग्रहण का उपयोग करते हैं) बस जहां आप एसडीके डाउनलोड करते हैं, ऐप बिलिंग में अतिरिक्त के भीतर देखें। एक बार ऐसा करने के बाद, यदि आप अपने एंड्रॉइड-एसडीके फ़ोल्डर में नेविगेट करते हैं तो यह ऐप बिलिंग v3 -> नमूने में अतिरिक्त> google> के अंतर्गत है। आपको बस इतना करना है कि इसे आयात करें और उपयोग की गई फाइलों की प्रतिलिपि बनाएँ और यहां वर्णित कुछ प्रश्न और श्रोताओं को जोड़ें http://developer.android.com/training/in-app-billing/preparing-iab-app.html#GetSample – AndroidPenguin

+0

हे एंड्रॉइड पेंगुइन, सहायता के लिए धन्यवाद। लगभग कार्यान्वित किया गया है, बस एक भ्रम है या कह सकता है कि Google के लिंक से यह नहीं समझा कि लेनदेन को कैसे पुनर्स्थापित करना है। यदि प्रत्येक उत्पाद को फिर से खरीदा नहीं जा सकता है तो जानकारी प्राप्त करने के लिए कि मैंने पहले से ही उत्पाद खरीदा है। धन्यवाद .. :) – LuminiousAndroid

+1

मेरी खुशी! ऊपर उठाने के लिए मत भूलना। सेट अप के ठीक बाद होने वाली क्वेरी खरीद यह करता है। जब तक आप निश्चित रूप से अपनी खरीद का उपभोग नहीं करते हैं। – AndroidPenguin

उत्तर

4

यह पता चल, छोड़ रहा है यह किसी के लिए भी है जो मेरे जैसा ही समस्या है। यूआई रीफ्रेश में मैं स्कैस के विवरण पूछे बिना IabHelper क्वेरी को कॉल कर रहा था। इस प्रकार सटीक स्कस के विवरण थे, लेकिन जो नहीं थे, असफल रहे।

+0

क्या आप समझा सकते हैं? –

5

यह मुझे स्टंप कर दिया गया था और स्वीकृत उत्तर में प्रासंगिक विवरण नहीं थे।

आपको एसईयू के साथ एक सूची पास करना है जिसे आप पूछना चाहते हैं (चाहे वे खरीदे गए हों या नहीं) स्टार्टसेटअप को कॉल करने के बाद। तो यह (अपर्याप्त) बॉयलरप्लेट TrivialDrive उदाहरण में प्रदान की गई चीज़ों के बजाय नीचे दिए गए कोड की तरह कुछ दिखाई देगा।

mHelper.queryInventoryAsync(true, skuList, mGotInventoryListener); 

इसके अलावा, यह लग रहा है कि कुछ प्रेत तरीकों (जो अभी भी अभी तक टिप्पणी नहीं है, जो भी गलत हैं में साफ नहीं कर रहे हैं) ... यहाँ है कि बग की अधिक जानकारी दी जा की तरह:

http://code.google.com/p/marketbilling/issues/detail?id=98

+0

यह स्वीकार्य उत्तर होना चाहिए।मुख्य बिंदु यह है कि आप जो स्की विवरण चाहते हैं उसे प्राप्त करने के लिए स्कूलिस्ट में पास होना है। यदि आप skuList में पास नहीं करते हैं तो कॉलबैक विधि केवल आपको खरीदे गए उत्पाद के स्कू विवरण वापस कर देगी! – Bruce