1

andengine でコーディングされたレベルベースのゲームで admob インタースティシャル広告を使用しています。ゲームの初回ロード時に広告が正しく表示されるようになりました。ただし、すべてのレベルの後に広告を表示したいと考えています。広告が 2 回目に呼び出されると、つまりレベル オーバー シーンでエラーが発生します。次のコードを使用しています。

"interstitial = new InterstitialAd(this, "123456789");
           adRequest = new AdRequest();
                   interstitial.loadAd(adRequest);
                   interstitial.setAdListener(ShootBalloonMainActivity.this);"

これはエラーです: Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません

これは、広告が 2 回目に表示されたときにメイン スレッドが一時停止されていないために発生していると結論付けました。したがって、2 つのスレッドが同時に実行され、エラーがスローされます。そうですか?その場合、メイン スレッドを一時停止するにはどうすればよいでしょうか。

4

3 に答える 3

1

私がやった方法:

これを MainActivity に追加します

public void removeAd() {
        LinearLayout layoutBottom = (LinearLayout) findViewById(R.id.bottom);
        layoutBottom.removeAllViews();

    }

    private void attachAd(LinearLayout layout) {
        AdWhirlLayout adWhirlLayout = new AdWhirlLayout(this, Constants.adwhirlId);
        layout.addView(adWhirlLayout);
    }


    public void showBottomAd() {
        removeAd();
        LinearLayout layout = (LinearLayout) findViewById(R.id.bottom);
        attachAd(layout);
    }

あなたのあらゆるシーンで:

GameActivity.gameActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                GameActivity.gameActivity.showBottomAd();
            }
        }) ;
于 2013-09-30T09:01:07.457 に答える
0

いくつかのこと:

1) インタースティシャルの作成と広告の読み込みを分離します。一度だけ作成し、各レベルの後に広告をロード (および表示) する必要があります。

2) Looper.prepare()を呼び出していないスレッド内でハンドラーを作成できません。つまり、このメッセージを生成しているコードは、メイン UI スレッド (または呼び出しによってそのように構成されているスレッド) から呼び出す必要があります。 Looper.prepare())。広告を表示しようとするのは 2 回目のようです (または、おそらく

于 2013-09-28T21:09:12.157 に答える