7

मेरे पास निम्न विधियों में (जो ठीक पहली बार काम करता है):NullPointer, inappbilling वी 3

public void TipUs(){ 
    String sku="tip_us"; 

    try { 
    Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), 
                sku, "inapp", "TIP_US"); 
    PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); 
    startIntentSenderForResult(pendingIntent.getIntentSender(), 
           1001, new Intent(), 
           Integer.valueOf(0), Integer.valueOf(0), 
           Integer.valueOf(0)); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } catch (SendIntentException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 1001) 
     {  
      int responseCode = data.getIntExtra("RESPONSE_CODE", 0); 
      String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); 
      String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE"); 

      if (resultCode == RESULT_OK) { 
       try { 
        JSONObject jo = new JSONObject(purchaseData); 
        String sku = jo.getString("productId"); 
       } 
       catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
} 

अगर मैं एक ही विधि का फिर से उपयोग करने का प्रयास (क्या गूगल में सेटिंग्स के अनुसार संभव हो जाना चाहिए प्ले) मुझे निम्न त्रुटि मिलती है:

java.lang.NullPointerException 
at com.appiclife.tipcal.Tip_Calculator.TipUs(Tip_Calculator.java:521) 
at com.appiclife.tipcal.Tip_Calculator.onClick(Tip_Calculator.java:350) 
at android.view.View.performClick(View.java:2485) 
at android.view.View$PerformClick.run(View.java:9080) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:3687) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
at dalvik.system.NativeStart.main(Native Method) 

क्या किसी को भी त्रुटि है, क्योंकि मैंने Google से बिल्कुल डेमो का उपयोग किया है, मुझे क्या बदलना चाहिए?

संपादित करें: ऐसा लगता है कि mService शून्य है (हालांकि अजीब बात यह है कि यह एक बार काम करता है, इसलिए यदि आप एक ही आइटम को एक से अधिक बार खरीद रहे हैं तो लगभग एक समस्या की तरह दिखता है)। मैं निम्नलिखित है:

यह मेरा कोड है:

OnCreate() 

Intent("com.android.vending.billing.InAppBillingService.BIND"), 
        mServiceConn, Context.BIND_AUTO_CREATE); 

और:

IInAppBillingService mService; 

ServiceConnection mServiceConn = new ServiceConnection() { 

    public void onServiceConnected(ComponentName name, 
       IBinder service) { 

       System.out.println("Test!"); 
       mService = IInAppBillingService.Stub.asInterface(service); 
    } 

    public void onServiceDisconnected(ComponentName name) { 
     mService = null; 
    } 


}; 

onServiceConnected कभी नहीं कहा जाता है। मैं इस मैनुअल में नहीं देखा था: http://developer.android.com/google/play/billing/billing_integrate.html

लेकिन मैं प्रकट करने के लिए निम्न सेवा जोड़ने की कोशिश की, परिणाम के बिना (मैं इसे फिर से हटा दिया, मैं वहाँ सेवा घोषित करना चाहिए?):

<service android:name="com.android.vending.billing.IInAppBillingService" /> 
+0

'com.appiclife.tipcal.Tip_Calculator.TipUs (Tip_Calculator.java:5221)' लाइन 521 क्या है? – Sam

+0

हे सैम, \t startIntentSenderForResult (लंबित INTent.getIntentSender(), – Diego

+0

मैंने ऐप बिलिंग में कभी भी उपयोग नहीं किया है, लेकिन मुझे लगता है कि लेनदेन विफल हुआ (आपको प्रतिक्रिया कोड देखना चाहिए)। – Sam

उत्तर

4

मैं एक ही समस्या में भाग गया। उपयोगकर्ता को एक ही SKU आइटम फिर से खरीदने से पहले खरीदे गए आइटम को समझने की आवश्यकता है।

जब आप buyIntentBundle चर सेट करते हैं, तो आप RESPONSE_CODE देख सकते हैं। यदि RESPONSE_CODE 7 है, तो उपयोगकर्ताओं को पिछले खरीद को ऐप द्वारा उपभोग करने की आवश्यकता है।

RESPONSE_CODE आईडी यहां पाया जा सकता: यह नमूना कोड का उपयोग कर खरीदी गई वस्तुओं के लिए http://developer.android.com/google/play/billing/billing_reference.html#billing-codes

क्वेरी: http://developer.android.com/google/play/billing/billing_integrate.html#QueryPurchases

INAPP_PURCHASE_DATA_LIST डेटा में "purchaseToken" के साथ एक JSON स्ट्रिंग है। CONSUME फ़ंक्शन में इस टोकन को पास करें।

एक बार जब आप खरीद पर विचार कर लेंगे, तो उपयोगकर्ता इसे फिर से खरीद सकता है।

+0

बहुत बहुत धन्यवाद एक बहुत ही मूल्यवान जवाब! – Matteo