在应用程序结算Android问题

时间:2014-12-11 22:50:44

标签: android android-intent in-app-purchase

我有两个主要问题,第一个问题是:

我在应用结算设置中使用了intelij。我最近切换到Android Studio 1.0稳定版,现在我无法像之前那样使应用内结算工作。具体问题是:

try {
     itemsDescription2.setText(inventory.getSkuDetails("images").getDescription());
     purchaseButton2.setText(inventory.getSkuDetails("images").getPrice());
    }
 catch(NullPointerException e){
    Log.d("PRICE","NPE happened" + e);
    }

NPE总是出现在这里。 "images"确实在我的Google Play开发者控制台上作为应用内商品,我之前没有任何问题。此外,当我开始购买“图像”时,我会收到一个谷歌播放对话框,上面写着“您试图购买的商品无法找到”。

正如我AndroidMaifest.xml 6171000中的Google Play服务版本4132500,但在我以前的intelij设置中,我一直在使用12-11 12:42:00.989 21348-21348/simplequiz.nick.com.namethatplanequiz E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: simplequiz.nick.com, PID: 21348 java.lang.RuntimeException: Unable to start activity ComponentInfo{simplequiz.nick.com/com.nick.simplequiz.MainActivity}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.billing.InAppBillingService.BIND } at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.billing.InAppBillingService.BIND } at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1674) at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1773) at android.app.ContextImpl.bindService(ContextImpl.java:1751) at android.content.ContextWrapper.bindService(ContextWrapper.java:538) at com.nick.simplequiz.MainActivity.onCreate(MainActivity.java:108) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 。我不确定谷歌播放服务的版本是否相关,但这是我能想到的唯一可能导致这个问题的事情。我尝试将项目更改为使用4.4.2而不是5.0进行编译,并且还更改了清单中声明的​​google play服务版本但发生了相同的错误。

我的第二个问题是运行Android 5.0的设备,例如我的Nexus 9,我收到此错误:

MainActivity

这是bindService(new Intent( "com.android.vending.billing.InAppBillingService.BIND"), connection, Context.BIND_AUTO_CREATE); 中发生的行:

Bundle buyIntentBundle = mservice.getBuyIntent(3, getPackageName(),
                            "images", "inapp", "key");

当我在这个问题中尝试建议的解决方案时:Google In-App billing, IllegalArgumentException: Service Intent must be explicit, after upgrading to Android L Dev Preview当我尝试发起购买时,我收到错误:

mservice

错误是此行的空指针异常。

我还注意到,在链接问题的已接受答案中实施解决方案会导致{{1}}始终为空,服务永远不会连接。

关于我还能尝试什么的任何建议?

3 个答案:

答案 0 :(得分:0)

它可能与Google Play服务库有关。您是否在SDK中安装了最新版本?

您是否使用新的gradle配置?如果在切换到Android Studio后出现第一个问题,并且没有其他任何更改,则可能是问题与新的gradle配置有关。如你所说,看一下如何整合游戏服务库(更多关于这个here)。

您是仅在Android 5.0上还是在较低版本上遇到这些问题?

答案 1 :(得分:0)

在进一步推进之前,您应该检查(response != BILLING_RESPONSE_RESULT_OK)之类的响应。它可以解决你的问题。

<强>参考:

ISSUE 41407

答案 2 :(得分:0)

更改您的MainActivity.onCreate()以与此类似地调用bindService:

Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, connection, Context.BIND_AUTO_CREATE);