问题描述
我试图安装在应用程序内结算在我的应用程序。我没有得到很远,我遇到了一个空指针异常尝试启动我的IabHelper。我下面这个谷歌教程。
I am attempting to setup In-App Billing in my application. I haven't got very far and am running into a null pointer exception when trying to start my IabHelper. I am following this google tutorial.
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,似乎空指针异常被触发IabHelper.java在线267.由于这是谷歌code,我不知道如何解决这个问题。这是行267。
In the below logcat, it appears that the null pointer exception is being triggered in IabHelper.java on line 267. Since this is google code, I'm not sure how to fix this. Here is line 267.
if (!mContext.getPackageManager().queryIntentServices(serviceIntent, 0).isEmpty()) {
下面是我的LogCat中出现错误:
Here is my LogCat with the error:
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
推荐答案
谷歌的另一个很好的例子一次写入,让别人解决我们的问题。即使在这个时候(2014年6月)的补丁仍然没有在发布的SDK。为了解决这个问题,替换
Another fine example of Googles 'write once, let others fix our problems'. Even at this moment (June 2014) the 'patch' is still not in the released sdk. To solve the problem replace
if (!mContext.getPackageManager().queryIntentServices(serviceIntent, 0).isEmpty()) {
与
PackageManager pm=mContext.getPackageManager();
List<ResolveInfo> intentServices = pm.queryIntentServices(serviceIntent, 0);
if (intentServices != null && !intentServices.isEmpty())
然后在处置code
Then in the dispose code
替换
if (mContext != null) mContext.unbindService(mServiceConn);
与
if (mContext != null && mService!=null) mContext.unbindService(mServiceConn);
我希望这有助于。
I hope this helps.
这篇关于IAB startSetup NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!