IAB startSetup NullPointerException

我正在尝试在我的应用程序中设置应用内结算。 当我试图启动我的IabHelper时,我没有太多的空间,正在运行一个空指针exception。 我正在关注这个谷歌教程 。

import com.iabtest.util.IabHelper; import com.iabtest.util.IabResult; public class MainActivity extends Activity { IabHelper mHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String base64EncodedPublicKey = "My_secret_key"; mHelper = new IabHelper(this, base64EncodedPublicKey); mHelper.enableDebugLogging(true); //Turned on to try to help solve the issue Log.d("TEST", "Starting setup."); mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { Log.d("TEST", "Setup finished."); if(!result.isSuccess()) { // Oh noes, there was a problem. Log.d("TEST", "Problem setting up in-app billing: " + result); return; } //IAB SET UP! Log.d("TEST", "IAB ready"); } }); } } 

在下面的logcat中,看起来在267行的IabHelper.java中触发了空指针exception。由于这是谷歌代码,我不知道如何解决这个问题。 这是267行。

 if (!mContext.getPackageManager().queryIntentServices(serviceIntent, 0).isEmpty()) { 

这是我的LogCat与错误:

 12-17 05:28:29.908: E/Trace(1478): error opening trace file: No such file or directory (2) 12-17 05:28:30.898: W/GooglePlayServicesUtil(1478): Google Play Store is missing. 12-17 05:28:31.838: D/TEST(1478): Starting setup. 12-17 05:28:31.838: D/IabHelper(1478): Starting in-app billing setup. 12-17 05:28:31.848: D/AndroidRuntime(1478): Shutting down VM 12-17 05:28:31.848: W/dalvikvm(1478): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 12-17 05:28:31.878: E/AndroidRuntime(1478): FATAL EXCEPTION: main 12-17 05:28:31.878: E/AndroidRuntime(1478): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.iabtest/com.iabtest.MainActivity}: java.lang.NullPointerException 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.app.ActivityThread.access$600(ActivityThread.java:141) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.os.Handler.dispatchMessage(Handler.java:99) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.os.Looper.loop(Looper.java:137) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.app.ActivityThread.main(ActivityThread.java:5041) 12-17 05:28:31.878: E/AndroidRuntime(1478): at java.lang.reflect.Method.invokeNative(Native Method) 12-17 05:28:31.878: E/AndroidRuntime(1478): at java.lang.reflect.Method.invoke(Method.java:511) 12-17 05:28:31.878: E/AndroidRuntime(1478): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 12-17 05:28:31.878: E/AndroidRuntime(1478): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 12-17 05:28:31.878: E/AndroidRuntime(1478): at dalvik.system.NativeStart.main(Native Method) 12-17 05:28:31.878: E/AndroidRuntime(1478): Caused by: java.lang.NullPointerException 12-17 05:28:31.878: E/AndroidRuntime(1478): at com.iabtest.util.IabHelper.startSetup(IabHelper.java:267) 12-17 05:28:31.878: E/AndroidRuntime(1478): at com.iabtest.MainActivity.onCreate(MainActivity.java:112) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.app.Activity.performCreate(Activity.java:5104) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 12-17 05:28:31.878: E/AndroidRuntime(1478): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 12-17 05:28:31.878: E/AndroidRuntime(1478): ... 11 more 

编辑:我仍然不确定错误的原因。 不过,我发现一个比谷歌文档更好的有用的教程。 http://www.techotopia.com/index.php/Integrating_Google_Play_In-app_Billing_into_an_Android_Application_%E2%80%93_A_Tutorial

Solutions Collecting From Web of "IAB startSetup NullPointerException"

谷歌的另一个很好的例子,写一次,让别人解决我们的问题“。 即使在这个时候(2014年6月),“补丁”仍然不在发布的sdk中。 解决问题replace

  if (!mContext.getPackageManager().queryIntentServices(serviceIntent, 0).isEmpty()) { 

  PackageManager pm=mContext.getPackageManager(); List<ResolveInfo> intentServices = pm.queryIntentServices(serviceIntent, 0); if (intentServices != null && !intentServices.isEmpty()) 

然后在configuration代码中

更换

  if (mContext != null) mContext.unbindService(mServiceConn); 

  if (mContext != null && mService!=null) mContext.unbindService(mServiceConn); 

我希望这有帮助。

请添加谷歌播放服务的jar文件。这是错误regrarding失踪谷歌播放服务

可能这个问题涉及到这里提出的问题

更新后的代码尚未推送到SDKpipe理器,但您可以在这里查看与此问题相关的所有更改:

https://code.google.com/p/marketbilling/source/detail?r=7ec85a9b619fc5f85023bc8125e7e6b1ab4dd69f

有4个文件受到这个问题的影响。 做出他们build议的改变,看看你是否仍然遇到同样的问题。

实际上,这里是返回null。

 Intent serviceIntent = getExplicitIapIntent(); 

对待这种情况:

  Intent serviceIntent = getExplicitIapIntent(); if(serviceIntent != null) { if (!mContext.getPackageManager().queryIntentServices(serviceIntent, 0).isEmpty()) { // service available to handle that Intent mContext.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); } }