簡體   English   中英

應用內購買成功后出現奇怪的空指針異常(Android)

[英]Strange null pointer exception after in-app purchase successful (Android)

我已經使用應用內結算(IAB)編寫了一個應用。 除了一件事,一切似乎都正常。 如果我促成購買,則顯示Google Play IAB購買,並且我購買了商品,然后出現“購買完成”窗口,然后消失。 但是,我的主應用程序似乎沒有開始重新設置動畫,幾秒鍾后,該應用程序崩潰了。 我的logcat輸出顯示它們是空指針異常(與我自己的編碼有關-與Android無關)

        try
        {
            Bundle buyIntentBundle = mService.getBuyIntent(3, mActivity.getPackageName(), (String)args[1], "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");

            if(buyIntentBundle.getInt("RESPONSE_CODE") == BILLING_RESPONSE_RESULT_OK)
            {
                PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");

                try
                {
                    mActivity.startIntentSenderForResult(pendingIntent.getIntentSender(),
                               1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
                               Integer.valueOf(0));
                }
                catch (SendIntentException e)
                {
                    Log.v("MYINFO", "Error purchasing item.");
                    e.printStackTrace();
                }
            }
            else
            {
                Log.v("MYINFO", "Error purchasing item.");

                showResponse(buyIntentBundle.getInt("RESPONSE_CODE"));
            }
        }
        catch (RemoteException e1)
        {
            e1.printStackTrace();
        }

這段代碼在我自己的AsyncTask購買類中,而mActivity是主要的Activity。 編碼

  mActivity.startIntentSenderForResult(...)

在主Activity中調用'OnActivityResult(...)'正常,但隨后發生崩潰。

有什么想法我可能做錯了嗎?

謝謝。

我的logcat輸出它:

V/MediaPlayer[Native](12951): start
E/MediaPlayer[Native](12951): start called in state 0
V/MediaPlayer[Native](12951): message received msg=100, ext1=-38, ext2=0
E/MediaPlayer[Native](12951): error (-38, 0)
D/MediaPlayer[Native](12951): calling notify_player_state: 0
V/MediaPlayer[Native](12951): callback application
V/MediaPlayer[Native](12951): back from callback
D/MediaPlayer[JAVA](12951): broadcasting MEDIA_CHANGE_PLAYER_STATE(with context) : 0x0
E/MediaPlayer[Native](12951): invoke failed: wrong state 0
D/MediaPlayer[JAVA](12951): broadcasting MEDIA_CHANGE_PLAYER_STATE(with context) : state = 0
V/MediaPlayer[Native](12951): MediaPlayer::setVolume(0.750000, 0.750000)
E/MediaPlayer[JAVA](12951): Error (-38,0)
V/MediaPlayerService(  301): [669] setVolume(0.750000, 0.750000)
V/AudioSink(  301): setVolume(0.750000, 0.750000)
W/dalvikvm(12951): threadid=33: thread exiting with uncaught exception (group=0x41b5ee48)
E/AndroidRuntime(12951): FATAL EXCEPTION: GLThread 22274
E/AndroidRuntime(12951): Process: com.mystuff.grame, PID: 12951
E/AndroidRuntime(12951): java.lang.NullPointerException
E/AndroidRuntime(12951):    at com.mystuff.grame.core.SpriteBatch.add(SpriteBatch.java:50)
E/AndroidRuntime(12951):    at com.mystuff.grame.core.Level.draw(Level.java:360)
E/AndroidRuntime(12951):    at com.mystuff.grame.core.Grame.drawGame(Grame.java:245)
E/AndroidRuntime(12951):    at com.mystuff.grame.core.Grame.onDrawFrame(Grame.java:178)
E/AndroidRuntime(12951):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1523)
E/AndroidRuntime(12951):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
W/ActivityManager(  972):   Force finishing activity com.mystuff.grame/.MainActivity
D/ActivityManager(  972): setFocusedStack: mFocusedStack=ActivityStack{439390b8 stackId=1, 21 tasks}
V/ActivityManager(  972): Moving to PAUSING: ActivityRecord{43d96740 u0 com.mystuff.grame/.MainActivity t421 f}
V/MediaPlayer[Native](12951): stop
E/MediaPlayer[Native](12951): stop called in state 0
V/MediaPlayer[Native](12951): message received msg=100, ext1=-38, ext2=0
E/MediaPlayer[Native](12951): error (-38, 0)
D/MediaPlayer[Native](12951): calling notify_player_state: 0
V/MediaPlayer[Native](12951): callback application
V/MediaPlayer[Native](12951): back from callback
V/ActivityManager(  972): Moving to PAUSED: ActivityRecord{43d96740 u0 com.mystuff.grame/.MainActivity t421 f} (pause complete)
V/ActivityManager(  972): Moving to STOPPING: ActivityRecord{43d96740 u0 com.mystuff.grame/.MainActivity t421 f} (finish requested)
I/ActivityManager(  972): resumeTopActivitiesLocked(): target Stack:ActivityStack{439390b8 stackId=1, 21 tasks}
D/ActivityManager(  972): resumeTopActivityLocked: Launching home next
V/ActivityManager(  972): moveHomeStack:

它必須與應用程序內購買有關,因為在應用程序內購買完成之前它不會發生……似乎應用程序內購買流程導致我的某些變量變為空。

你可能是對的。 打開IAP對話框后,我認為onPause已觸發。 如果觸發了onPause,則意味着很多變量都設置為null並像MediaPlayer一樣關閉。

或者,當IAP對話框出現時,MediaPlayer(我認為是原因)被設置為強制暫停。 您可以嘗試做的是在初始化購買流程時(或在按下觸發它的按鈕時)暫停MediaPLayer,並在完成后重新初始化

暫無
暫無

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

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