6

我已经在我的应用程序中实现了应用程序购买我已经使用“TrivialDrive”示例进行第 3 版应用程序内计费,我已经使用静态响应测试了应用程序,所有工作都按预期工作。

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

我的代码购买成功

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.");
}
}

它在静态响应上工作得很好,但是当我从市场上购买时崩溃。

4

5 回答 5

1

我通过简单地使我的 IabHelper 成员变量(mHelper)静态解决了这个问题

于 2014-11-14T16:51:07.240 回答
0

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

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

老实说,我不知道为什么要重新创建 Activity 以及为什么要调用 Activity 的新实例的 onActivityResult 方法,但现在一切似乎都正常了。

于 2013-02-14T11:50:51.757 回答
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();
}

它工作正常。我希望它会帮助某人。

于 2014-01-16T11:54:43.173 回答
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

如果这仍然与您相关,您应该检查您的“complain()”方法。

于 2014-06-26T12:04:53.567 回答
0

当我遇到这个问题时,我发现我的应用程序中的公钥与 google play 为我的应用程序生成的许可证密钥不对应

于 2016-10-12T12:14:35.113 回答