簡體   English   中英

付款后應用內購買崩潰(Android,LibGDX)

[英]In app purchase crash after payment (Android, LibGDX)

我一直在嘗試使用LibGDX在我的游戲中實現應用購買,而且幾乎完成了一個問題,每當我完成購買一件商品時,應用就會崩潰。 一旦我放入信用卡和其他詳細信息,就會出現一條消息,提示該物品已購買,然后在5秒鍾后崩潰。

到目前為止,我一直無法在網上找到任何東西。

如果您可以發現錯誤,這是我的代碼:

public class AndroidLauncher extends AndroidApplication implements RequestHandler, GoogleGameHandler, GameHelperListener {

protected Brot game;
private GameHelper gameHelper;

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();

    gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);
    gameHelper.setup(this);

    String base64EncodedPublicKey = "xxxxxx";
    mHelper = new IabHelper(this, base64EncodedPublicKey);
    mHelper.enableDebugLogging(true);

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            if (mHelper == null)
                return;

            mHelper.queryInventoryAsync(mGotInventoryListener);
        }
    });
    initialize(new Brot(this, Store.googlePlay, this), config);

    @Override
public void onActivityResult(int request, int response, Intent data) {

    super.onActivityResult(request, response, data);
    gameHelper.onActivityResult(request, response, data);

    if (mHelper == null)
        return;
    mHelper.handleActivityResult(request, response, data);

}

IabHelper mHelper;

final String firesku = "firesku";
final String windsku = "windsku";

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(IabResult result,
            math.drop.billing.util.Inventory inventory) {
        if (mHelper == null)
            return;
        if (result.isFailure())
            return;

            Purchase fireitem = inventory.getPurchase(firesku);
        if(fireitem != null){
            mHelper.consumeAsync(inventory.getPurchase(firesku), null);
            return;
        }

        Purchase winditem = inventory.getPurchase(windsku);
        if(winditem != null){
            mHelper.consumeAsync(inventory.getPurchase(windsku), null);
            return;
        }

        }
};

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
        if (mHelper == null)
            return;

        if (result.isFailure())
            return;

         if(purchase.getSku().equals(firesku)){
            GameScreen.didbuyfire=true;
            Settings.savefire();
            Settings.save();
            resetScreen();
            mHelper.consumeAsync(purchase, null);
        }

        if(purchase.getSku().equals(windsku)){
            GameScreen.didbuywind=true;
            Settings.savewind();
            Settings.save();
            resetScreen();
            mHelper.consumeAsync(purchase, null);
        }

        }
};

static final int RC_REQUEST = 10001;


public void resetScreen() {
    if(game.getScreen() instanceof GameScreen){
        GameScreen obj = (GameScreen) game.getScreen();
        obj.savePurchases();
        obj.changeScreenWithFadeOut(MainMenuScreens.class, game);
    }
}

@Override
public void buyfire() {
    String payload = UUID.randomUUID().toString();
    mHelper.launchPurchaseFlow(this, firesku, RC_REQUEST,
            mPurchaseFinishedListener, payload);

}

@Override
public void buywind() {
    String payload = UUID.randomUUID().toString();
    mHelper.launchPurchaseFlow(this, windsku, RC_REQUEST,
            mPurchaseFinishedListener, payload);

}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    if (mHelper != null) mHelper.dispose();
       mHelper = null;
}
}

一些細節:

即使在崩潰之后也成功購買了該商品(該商品可以在再次打開應用程序時使用)

這是我使用的指南: http : //developer.android.com/training/in-app-billing/preparing-iab-app.html#GetSample

應用內購買的測試無法在Eclipse調試中完成,因此我看不到logcat

任何幫助,將不勝感激。

編輯:從logcat:

09-25 14:38:01.343: E/AndroidRuntime(3078): FATAL EXCEPTION: main 
09-25 14:38:01.343: E/AndroidRuntime(3078): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=10001, result=-1, data=Intent { (has extras) }} to activity {com.doit.mail2.android/com.doit.mail2.android.AndroidLauncher}: java.lang.NullPointerException
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.app.ActivityThread.deliverResults(ActivityThread.java:2693) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2735) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.app.ActivityThread.access$2000(ActivityThread.java:124) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:998) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.os.Looper.loop(Looper.java:130) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.app.ActivityThread.main(ActivityThread.java:3844) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at java.lang.reflect.Method.invokeNative(Native Method) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at java.lang.reflect.Method.invoke(Method.java:507) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at dalvik.system.NativeStart.main(Native Method) 
09-25 14:38:01.343: E/AndroidRuntime(3078): Caused by: java.lang.NullPointerException 
09-25 14:38:01.343: E/AndroidRuntime(3078): at com.doit.mail2.android.AndroidLauncher.resetScreen(AndroidLauncher.java:350) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at com.doit.mail2.android.AndroidLauncher$2.onIabPurchaseFinished(AndroidLauncher.java:251) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at math.drop.billing.util.IabHelper.handleActivityResult(IabHelper.java:467) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at com.doit.mail2.android.AndroidLauncher.onActivityResult(AndroidLauncher.java:60) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.app.Activity.dispatchActivityResult(Activity.java:3988) 
09-25 14:38:01.343: E/AndroidRuntime(3078): at android.app.ActivityThread.deliverResults(ActivityThread.java:2689) 
09-25 14:38:01.343: E/AndroidRuntime(3078): ... 11 more

Libgdx有一個擴展庫,該庫以跨平台的方式提供應用程序內計費服務: https://github.com/libgdx/gdx-pay : https://github.com/libgdx/gdx-pay 您可以按原樣使用它,也可以將其用作如何在核心代碼和特定於平台的代碼之間進行接口的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM