如何在应用内结算中解决此错误?

时间:2011-11-14 07:43:20

标签: android in-app-billing

FATAL EXCEPTION: main
java.lang.NullPointerException
    at android.os.Parcel.readException(Parcel.java:1328)
    at android.os.Parcel.readException(Parcel.java:1276)
    at com.android.vending.billing.IMarketBillingService$Stub$Proxy.sendBillingRequest(IMarketBillingService.java:100)
    at kr.my.dungeons.BillingService$CheckBillingSupported.run(BillingService.java:209)
    at kr.my.dungeons.BillingService$BillingRequest.runIfConnected(BillingService.java:127)
    at kr.my.dungeons.BillingService.runPendingRequests(BillingService.java:609)
    at kr.my.dungeons.BillingService.onServiceConnected(BillingService.java:654)
    at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1049)
    at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1066)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:126)
    at android.app.ActivityThread.main(ActivityThread.java:4002)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:491)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
    at dalvik.system.NativeStart.main(Native Method)

这是错误语法。

  1. 从SDK获取示例源。

  2. 将来自谷歌市场的“公钥”放入Security.java。

  3. 我的源路径是'src / kr / my /',而aidl文件路径是'src / com / android / vending / billing /'。

  4. 选中AndroidManifest.xml。

  5. 将apk上传到谷歌市场。 (未公布)

  6. 在谷歌市场添加'sword_001','potion_001'。(已发布)

  7. 在设备上安装了相同的apk。

  8. (来自https://github.com/robotmedia/AndroidBillingLibrary的示例源中的相同错误)

    我错了什么?

4 个答案:

答案 0 :(得分:4)

当用户未接受市场EULA时会发生这种情况

所以启动EULA

 try {
    CALL BILLING CODE HERE .....
  } catch (NullPointerException e) {
    initialiseMarket();
  }

private void initialiseMarket() {
  new AlertDialog.Builder(this).
    setTitle("Android Market").
    setNeutralButton("CLOSE"), new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int which) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search"));
        startActivity(intent);
      }
    }).
    setMessage("Android Market not initialised. Please accept EULA and restart.").
    show();
}

Taken from here

答案 1 :(得分:0)

我正在努力解决这个问题https://github.com/drewjw81/AndroidBillingLibrary

当此版本无法正确绑定到播放时,应显示警告。

如果您使用它,请记住它仍然需要一些工作,所以请测试,如果错误仍然发生,请在我的页面上提交错误报告。

答案 2 :(得分:0)

这似乎是一个已知的应用内结算错误报告here

发生这种情况时,我在AndroidBillingLibrary添加了catch

答案 3 :(得分:0)

在这里阅读我的答案:

android in-app billing - restoreTransactionInformation

我假设你试图恢复交易,因为一堆用户(包括我)在这样做时看到了这个堆栈跟踪。

发生错误是因为在调用restoreTransactions时发送回的CONFIRM_TRANSACTIONS请求中添加了一个空字段('notification_id'字段)。