2013-02-09 86 views
6

我已在应用程序购买中实现了我的应用程序我已经使用“TrivialDrive”示例了应用程序内结算版本3,我已经使用静态响应测试了应用程序,所有工作均按预期进行。Android应用程序内购买后付款崩溃

但是,当我从成功购买市场,应用程序崩溃下载的应用程序,

我的代码是成功购买的

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() { 
public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 

    Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase); 
    if (result.isFailure()) { 
    complain("Error purchasing: " + result); 
    } 

    if (purchase != null) { 
    if (purchase.getSku().equals(Constants.IN_APP_PURCHASE_PRODUCT_ID)) { 
     // bought the premium upgrade! 
     String message = getResources().getString(R.string.app_purchase_successful_msg); 
     mIsPremium = true; 
     updateUi(mIsPremium); 
     successAlert(message); 
    } 
    } 
} 
}; 

我已经设置消息在成功购买,但我不能看到此消息, (意味着那些linse没有执行),当我成功从它购买,应用程序成功付款后崩溃。

当重新启动应用程序,并尝试购买它说已经购买的物品。

我从开发者控制台得到崩溃报告。

02-09 02:01:13.181: E/AndroidRuntime(11530): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=-1, data=Intent { (has extras) }} to activity {com.eknathkadam.grammaruplite/com.webrich.base.ui.GoogleInAppPurchaseActivity}: java.lang.NullPointerException 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.deliverResults(ActivityThread.java:3141) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.access$1100(ActivityThread.java:130) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.os.Looper.loop(Looper.java:137) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.main(ActivityThread.java:4745) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at java.lang.reflect.Method.invokeNative(Native Method) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at java.lang.reflect.Method.invoke(Method.java:511) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at dalvik.system.NativeStart.main(Native Method) 
**02-09 02:01:13.181: E/AndroidRuntime(11530): Caused by: java.lang.NullPointerException 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Base64.decode(Base64.java:434)** 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Security.generatePublicKey(Security.java:87) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.Security.verifyPurchase(Security.java:66) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.google.billing.IabHelper.handleActivityResult(IabHelper.java:437) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at com.webrich.base.ui.GoogleInAppPurchaseActivity.onActivityResult(GoogleInAppPurchaseActivity.java:238) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.Activity.dispatchActivityResult(Activity.java:5192) 
02-09 02:01:13.181: E/AndroidRuntime(11530): at android.app.ActivityThread.deliverResults(ActivityThread.java:3137) 
02-09 02:01:13.181: E/AndroidRuntime(11530): ... 11 more 
02-09 02:02:20.610: E/JavaBinder(250): !!! FAILED BINDER TRANSACTION !!! 
02-09 02:02:20.638: E/MountService(250): Listener dead 
02-09 02:02:20.638: E/MountService(250): Listener dead 
02-09 02:02:22.028: E/InputDispatcher(250): channel '41f313f0 com.android.vending/com.android.vending.AssetBrowserActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 
02-09 02:03:59.884: E/PowerManagerService(250): Excessive delay setting brightness: 198ms, mask=2 

它扔空指针异常。onActivityResult()在此行

if (!mHelper.handleActivityResult(requestCode, resultCode, data)) 

方法是这样的

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); 

// Pass on the activity result to the helper for handling 
if (!mHelper.handleActivityResult(requestCode, resultCode, data)) { 
    // not handled, so handle it ourselves (here's where you'd 
    // perform any handling of activity results not related to in-app 
    // billing... 
    super.onActivityResult(requestCode, resultCode, data); 
} else { 
    Log.d(TAG, "onActivityResult handled by IABUtil."); 
} 
} 

它适用于静态的响应,但在我崩溃时完全没有问题的方法从市场上购买。

+1

自从昨天我面临同样的问题。我希望我会在这里得到一些解决方案。 – 2013-02-09 05:06:19

+0

我自昨天起也面临这个问题,不知道为什么 – Goofy 2013-02-09 05:37:48

+0

@MehulJoisar你什么时候上传了你的应用程序? – Goofy 2013-02-09 05:38:05

回答

0

我正面临完全相同的问题。然后,我意识到整个活动有时会在购买过程中重新创建(无缘无故)。我还没有单独测试Trivia示例以检查它是否与该应用程序一起发生,但我期望它,因为它似乎与计费过程(或者该示例的帮助程序方法,我在自己的应用程序中使用)有关太)。

我自己的代码的计费部分和Trivia示例之间的唯一区别是,我从某个事件上启动的方法实例化mHelper,而在Trivia示例中则是从onCreate实例化的。所以我做了这个改变(我现在从onCreate创建mHelper的新实例),并且一切都开始正常工作。事情是,当活动重新创建时,mHelper会在onCreate中再次实例化,因此在以下对onActivityResult的调用中,它不能为空。

说实话,我不知道为什么活动被重新创建,为什么活动的新实例的onActivityResult方法被调用,但一切似乎现在工作。

+0

这听起来很奇怪! – 2013-02-27 06:01:25

+0

是的,我知道这听起来很奇怪,但它有效,而且它确定了问题的根源。我非常确定问题与Trivia示例的库相关,而不是针对In App Billing本身,因此您在原始问题“我认为应用内v3尚不稳定”中的评论没有任何意义。我想@Mac,提出问题的人,如果他将创建的mHelper实例从onCreate方法移出,就像我之前做的那样发布...... – thelawnmowerman 2013-02-27 10:15:41

+0

好吧,是的,有一些错误,活动不应该重新创建。显然,我已经为应用内v3(意味着应用内v3库)发表了评论,而不是针对Google的整个应用内购买功能。 – 2013-02-27 10:25:26

0

我有同样的问题。 我发现当显示应用内购买框时,方法onPause在我的应用程序活动中执行,当方框关闭时,执行onResume方法。 这是这些方法的代码:

@Override 
public void onPause() 
{ 
    mWakeLock.release(); 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
    mWakeLock.acquire(); 
} 

最后我除去在其中执行mWaveLock行。

@Override 
public void onPause() 
{ 
    super.onPause(); 
} 

@Override 
public void onResume() 
{ 
    super.onResume(); 
} 

它工作正常。 我希望它能帮助别人。

0

我知道这个线程是旧的,但我可能只是有同样的问题。 你的方法是什么

complain("Error purchasing: " + result); 

做什么?

我叫

Toast.makeText(getParent(), "Premium purchased successfully", Toast.LENGTH_LONG) 
        .show(); 
在相同的位置

,这引起了我下面的错误:

06-26 14:02:54.229: E/AndroidRuntime(25681): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=0, data=Intent { (has extras) }} to activity {sf.com.flightBook/sf.com.flightBook.ui.configuration.ConfigurationMain}: java.lang.NullPointerException 

如果这仍是有关你,你应该检查你的“告状( )“ 方法。

1

我只需修复了这个问题使我IabHelper成员变量(mHelper)静态

0

当我有这个问题,我想通了,在我的应用我的公钥不符合许可其谷歌播放生成的密钥为我的应用程序