java - 应用程序内空指针异常

标签 java android

我正在尝试在我的应用程序中实现应用内计费。我写了这段代码。

public class Settings extends PreferenceFragment {

    ServiceConnection mServiceConn;
    IInAppBillingService mService;
    PendingIntent pending;
    Intent intent;
    Bundle bundle;

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mService != null) {
            getActivity().unbindService(mServiceConn);
        }   
    }

    @Override
    public void onCreate(Bundle savedIstanceState) {
        super.onCreate(savedIstanceState);
        addPreferencesFromResource(R.xml.settings);

        getActivity().getActionBar().setTitle(getString(R.string.settings));

         mServiceConn = new ServiceConnection() {
                @Override
                public void onServiceConnected(ComponentName arg0, IBinder arg1) {
                    // TODO Auto-generated method stub
                       mService = IInAppBillingService.Stub.asInterface(arg1);
                }

                @Override
                public void onServiceDisconnected(ComponentName arg0) {
                    // TODO Auto-generated method stub
                    mService = null;
                }
            };

            intent = new Intent("com.android.vending.billing.InAppBillingService.BIND").setPackage("com.android.vending");
            getActivity().bindService(intent, mServiceConn, Context.BIND_AUTO_CREATE);

            try {
                bundle = mService.getBuyIntent(3, getActivity().getPackageName(), "pro_version", "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
                pending = bundle.getParcelable("BUY_INTENT");
                getActivity().startIntentSenderForResult(pending.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SendIntentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }

}

当我启动应用程序并打开此 fragment 时,应用程序崩溃并出现以下错误:

01-31 19:59:30.969: E/AndroidRuntime(11546): java.lang.NullPointerException: Attempt to invoke interface method 'android.os.Bundle com.android.vending.billing.IInAppBillingService.getBuyIntent(int, java.lang.String, java.lang.String, java.lang.String, java.lang.String)' on a null object reference

在 AndroidManifest 中显然我有这些权限:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>     
 <uses-permission android:name="android.permission.INTERNET"/> 
 <uses-permission android:name="com.android.vending.BILLING"/>

最佳答案

您的 try block 在 onServiceConnected 之前调用,这就是 mServicenull 的原因。将 try block 移动到 onServiceConnected 内部以及赋值之后,如下所示:

    mServiceConn = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName arg0, IBinder arg1) {
                mService = IInAppBillingService.Stub.asInterface(arg1);
                try {
                    bundle = mService.getBuyIntent(3, getActivity().getPackageName(), "pro_version", "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");
                    pending = bundle.getParcelable("BUY_INTENT");
                    getActivity().startIntentSenderForResult(pending.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
                } catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SendIntentException e) {
                     // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void onServiceDisconnected(ComponentName arg0) {
                // TODO Auto-generated method stub
                mService = null;
            }
        };

关于java - 应用程序内空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261243/

相关文章:

android 中的 Java 正则表达式

android - doInBackground 方法中的异常

Android:自定义通知外观问题

android - 从后台堆栈中删除 fragment

android - 使用 SQLite 数据库文件更新在更新/升级节点中发布应用程序

java - JXBrowser在Ubuntu18.04中启动失败

java - 在 IZPack 中自定义安装程序

java - 用线连接点以创建折线图

android - 构建 AOSP 应用程序并对其进行自定义

java - 如何在循环内另外迭代 for(String s : st) in java?