1

我们在使用andengine 编码的基于关卡的游戏中使用admob 插页式广告。首次加载游戏时广告正常显示。但是,我们希望在每个级别之后展示广告。它在第二次调用广告时给出错误,即在场景上的水平。我们正在使用以下代码。

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

这是错误:无法在未调用 Looper.prepare() 的线程内创建处理程序

我们得出的结论是,这种情况正在发生,因为当广告第二次显示时主线程没有暂停。所以两个线程同时运行会引发错误。是这样吗?如果是这样,我们如何暂停主线程?

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

当你从一个场景移动到另一个场景时,首先你必须删除“adRequest”的前一个实例,然后添加新实例。当你在每个场景中调用时,将此代码放在“UIthread”中。它会起作用。

于 2013-09-30T04:43:34.020 回答
0

几件事:

1)将构建插页式广告与加载广告分开。您应该只构建一次,您应该在每个级别之后加载(并显示)广告。

2) Can't create handler inside thread that has not called Looper.prepare(),意味着生成此消息的代码需要从主 UI 线程(或已通过调用配置为这样的线程调用Looper.prepare())。这听起来像是您第二次尝试展示广告(或者可能构建

于 2013-09-28T21:09:12.157 回答