Android应用内结算购买活动导致应用崩溃

问题描述 投票:0回答:1

Android应用内结算购买活动正在崩溃应用。

我有一个应用内结算活动,购买订阅以删除广告1个月。

但是当我点击调用结算活动的删除广告按钮时,该应用程序正在崩溃。

这是我的logcat输出:

12-18 02:07:51.872: E/chromium(694): [ERROR:browser_gpu_channel_host_factory.cc(258)] Failed to init browser shader disk cache.
12-18 02:07:51.883: E/libEGL(694): validate_display:255 error 3008 (EGL_BAD_DISPLAY)
12-18 02:07:51.888: W/cr.media(694): Requires BLUETOOTH permission
12-18 02:07:51.907: W/art(694): Attempt to remove non-JNI local reference, dumping thread
12-18 02:07:51.914: W/AwContents(694): onDetachedFromWindow called when already detached. Ignoring
12-18 02:07:52.278: W/VideoCapabilities(694): Unrecognized profile 2130706433 for video/avc
12-18 02:07:52.310: I/VideoCapabilities(694): Unsupported profile 4 for video/mp4v-es
12-18 02:07:52.316: I/OMXClient(694): Using client-side OMX mux.
12-18 02:07:52.396: I/Ads(694): Starting ad request.

12-18 02:07:52.401: I/Ads(694): Please set theme of AdActivity to @android:style/Theme.Translucent to enable transparent background interstitial ad.
12-18 02:07:52.408: I/Ads(694): Starting ad request.

12-18 02:07:52.411: I/Ads(694): Please set theme of AdActivity to @android:style/Theme.Translucent to enable transparent background interstitial ad.
12-18 02:07:52.420: D/OpenGLRenderer(694): Use EGL_SWAP_BEHAVIOR_PRESERVED: true
12-18 02:07:52.439: D/billing(694): In app billing is set up
12-18 02:07:52.542: I/OpenGLRenderer(694): Initialized EGL, version 1.4
12-18 02:07:54.634: D/AndroidRuntime(694): Shutting down VM
12-18 02:07:54.636: E/AndroidRuntime(694): FATAL EXCEPTION: main
12-18 02:07:54.636: E/AndroidRuntime(694): Process: com.ifreedomapp.v3, PID: 694
12-18 02:07:54.636: E/AndroidRuntime(694): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Activity.startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int)' on a null object reference
12-18 02:07:54.636: E/AndroidRuntime(694):  at com.ifreedom.util.IabHelper.launchPurchaseFlow(IabHelper.java:431)
12-18 02:07:54.636: E/AndroidRuntime(694):  at com.ifreedom.util.IabHelper.launchPurchaseFlow(IabHelper.java:347)
12-18 02:07:54.636: E/AndroidRuntime(694):  at com.ifreedom.StatusActivity$4.onClick(StatusActivity.java:379)
12-18 02:07:54.636: E/AndroidRuntime(694):  at android.view.View.performClick(View.java:5204)
12-18 02:07:54.636: E/AndroidRuntime(694):  at android.view.View$PerformClick.run(View.java:21153)
12-18 02:07:54.636: E/AndroidRuntime(694):  at android.os.Handler.handleCallback(Handler.java:739)
12-18 02:07:54.636: E/AndroidRuntime(694):  at android.os.Handler.dispatchMessage(Handler.java:95)
12-18 02:07:54.636: E/AndroidRuntime(694):  at android.os.Looper.loop(Looper.java:148)
12-18 02:07:54.636: E/AndroidRuntime(694):  at android.app.ActivityThread.main(ActivityThread.java:5417)
12-18 02:07:54.636: E/AndroidRuntime(694):  at java.lang.reflect.Method.invoke(Native Method)
12-18 02:07:54.636: E/AndroidRuntime(694):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-18 02:07:54.636: E/AndroidRuntime(694):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-18 02:07:57.191: I/GAV3(694): Thread[GAThread,5,main]: No campaign data found.

这是我的订阅按钮活动:

    bsubscribe.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        if (billing_error == "") {
            if (!isSubscribed)
                mHelper.launchPurchaseFlow(getParent(), SKU_SUBSCRIPTION, 9999, mPurchaseFinishedListener,"");
            else
                Toast.makeText(mContext, getResources().getString(R.string.already_subs), Toast.LENGTH_SHORT).show();
        } else
            Toast.makeText(mContext, "There's some error in billing : " + billing_error, Toast.LENGTH_LONG).show();
    }
});

}

这是setbilling函数:

private void setInAppBilling() {
mHelper = new IabHelper(mContext, bill_key);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
    public void onIabSetupFinished(IabResult result) {
        if (mHelper == null)
            return;

        if (!result.isSuccess()) {
            Log.d("billing", "probelem in setting billing" + result);
            billing_error = "" + result;
        }
        if (result.isSuccess()) {
            Log.d("billing", "In app billing is set up");
            mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() {

                @Override
                public void onQueryInventoryFinished(IabResult result, Inventory inv) {
                    if (inv.getPurchase(SKU_SUBSCRIPTION) == null) {
                        edit.putBoolean("subscription", false);
                        edit.commit();
                    } else {
                        edit.putBoolean("subscription", true);
                        edit.commit();
                        bsubscribe.setVisibility(View.GONE);
                    }
                }
            });
        }
    }
});
 }

  IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new         IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase info) {
    if (result.isFailure()) {
        Toast.makeText(mContext, getResources().getString(R.string.error_subs), Toast.LENGTH_SHORT).show();
        return;
    }

    if (info.getSku().equals(SKU_SUBSCRIPTION)) {
        Toast.makeText(mContext, getResources().getString(R.string.success_subs), Toast.LENGTH_SHORT).show();
        edit.putBoolean("subscription", true);
        edit.commit();
    }
}
   };

从活动的OnCreate调用设置结算。

当我点击删除广告按钮(bsubscribe)时应用程序崩溃

java android eclipse in-app-purchase in-app-billing
1个回答
0
投票

很难准确地说明所提供的代码但是看起来getParent()的调用在你的onClick方法中返回null。然后在IabHelper.java的第431行,你在一个空对象上调用startIntentSenderForResult

© www.soinside.com 2019 - 2024. All rights reserved.