2014-01-23 47 views
0
01-23 05:32:26.747: E/AndroidRuntime(14589): java.lang.NullPointerException 
01-23 05:32:26.747: E/AndroidRuntime(14589): at com.azeandroid.sudokufree.util.IabHelper.launchPurchaseFlow(IabHelper.java:401) 
01-23 05:32:26.747: E/AndroidRuntime(14589): at com.azeandroid.sudokufree.util.IabHelper.launchPurchaseFlow(IabHelper.java:338) 

我看到的代码的NullPointerException在inAppBilling V3

if (listener != null) listener.onIabPurchaseFinished(r, null); 

后在论坛上“回归”同样的问题,但在我的代码,我已经“回归”的声明,但仍然给了同样的错误。

的代码错误:

act.startIntentSenderForResult(pendingIntent.getIntentSender(), 
             requestCode, new Intent(), 
             Integer.valueOf(0), Integer.valueOf(0), 
             Integer.valueOf(0)); 

全launchPurchaseFlow方法:

public void launchPurchaseFlow(Activity act, String sku, String itemType, int requestCode, 
        OnIabPurchaseFinishedListener listener, String extraData) { 
    checkNotDisposed(); 
    checkSetupDone("launchPurchaseFlow"); 
    flagStartAsync("launchPurchaseFlow"); 
    IabResult result; 

    if (itemType.equals(ITEM_TYPE_SUBS) && !mSubscriptionsSupported) { 
     IabResult r = new IabResult(IABHELPER_SUBSCRIPTIONS_NOT_AVAILABLE, 
       "Subscriptions are not available."); 
     flagEndAsync(); 
     if (listener != null) listener.onIabPurchaseFinished(r, null); 
     return; 
    } 

    try { 
     logDebug("Constructing buy intent for " + sku + ", item type: " + itemType); 
     Bundle buyIntentBundle = mService.getBuyIntent(3, mContext.getPackageName(), sku, itemType, extraData); 
     int response = getResponseCodeFromBundle(buyIntentBundle); 
     if (response != BILLING_RESPONSE_RESULT_OK) { 
      logError("Unable to buy item, Error response: " + getResponseDesc(response)); 
      flagEndAsync(); 
      result = new IabResult(response, "Unable to buy item"); 
      if (listener != null) listener.onIabPurchaseFinished(result, null); 
      return; 
     } 

     PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT); 
     logDebug("Launching buy intent for " + sku + ". Request code: " + requestCode); 
     mRequestCode = requestCode; 
     mPurchaseListener = listener; 
     mPurchasingItemType = itemType; 
     act.startIntentSenderForResult(pendingIntent.getIntentSender(), 
             requestCode, new Intent(), 
             Integer.valueOf(0), Integer.valueOf(0), 
             Integer.valueOf(0)); 
    } 
    catch (SendIntentException e) { 
     logError("SendIntentException while launching purchase flow for sku " + sku); 
     e.printStackTrace(); 
     flagEndAsync(); 

     result = new IabResult(IABHELPER_SEND_INTENT_FAILED, "Failed to send intent."); 
     if (listener != null) listener.onIabPurchaseFinished(result, null); 
    } 
    catch (RemoteException e) { 
     logError("RemoteException while launching purchase flow for sku " + sku); 
     e.printStackTrace(); 
     flagEndAsync(); 

     result = new IabResult(IABHELPER_REMOTE_EXCEPTION, "Remote exception while starting purchase flow"); 
     if (listener != null) listener.onIabPurchaseFinished(result, null); 
    } 
} 
+0

请张贴整个'launchPurchaseFlow' –

+0

我张贴的整个方法(编者) – Javanshir

回答

0

检查是否pendingIntent为null:

PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT); 
if (pendingIntent == null) 
    Log.E(TAG, "pendingIntent is null"); 
+0

没有,它不为空。 – Javanshir

0

同时检查getIntentSender()为null。像:

if (pendingIntent.getINtentSender()!=null) 
act.startIntentSenderForResult(pendingIntent.getIntentSender(), 
            requestCode, new Intent(), 
            Integer.valueOf(0), Integer.valueOf(0), 
            Integer.valueOf(0)); 
+0

它也不为空。 我会从不同的来源开始写每个人,好像它不想工作 – Javanshir

相关问题