在非活动类中显示admob interstitial

时间:2013-12-20 12:00:37

标签: android admob

在我的游戏中,我有一个构建Gameview的类,允许用户在他想要的时候玩各种级别。现在我想在关卡结束时显示一个admob interstitial。 这个类GameView.java最初启动游戏的方法是从主要活动中调用的。

admob插页式广告代码需要将活动实例作为第一个参数。所以我将一个main活动的实例(使用此关键字)传递给GameView的play方法,但是在调用插页式代码时出现以下异常:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我在GameView.java中的代码是:

  InterstitialAd interstitial = new InterstitialAd((MainActivity)mContext,
        "admobunitid");
// Create ad request

AdRequest adRequest = new AdRequest();
// Begin loading your interstitial
interstitial.loadAd(adRequest);
interstitial.setAdListener((MainActivity)mContext);

GameView.java不扩展任何类,并且现在不实现任何接口。对此有何帮助?

4 个答案:

答案 0 :(得分:3)

你是从工作线程调用的。你需要在主线程内调用。例如,您可以使用处理程序。

 activity.runOnUiThread(new Runnable() {
      public void run() {
        InterstitialAd interstitial = new InterstitialAd((MainActivity)mContext,
        "admobunitid");
// Create ad request

AdRequest adRequest = new AdRequest();
// Begin loading your interstitial
interstitial.loadAd(adRequest);
interstitial.setAdListener((MainActivity)mContext);
      }
    });

答案 1 :(得分:1)

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

当您尝试从主线程外部显示Dialog时,通常会发生这种情况。

尝试将该代码包装在Runnable中,然后使用MainActivity.runOnUiThread();

执行它

答案 2 :(得分:0)

是否有使用接口的禁忌症?因为在这种情况下使用它们是合理的。

答案 3 :(得分:0)

这不是活动类,因此您需要在runOnUiThread内进行调用。就像它是android asynctask类的doBackground方法那么你需要像这样调用。

activity/context.runOnUiThread(new Runnable() {
  public void run() {
    /// your Ui view amd message
InterstitialAd interstitial = new InterstitialAd((MainActivity)mContext,
        "admobunitid");
// Create ad request

AdRequest adRequest = new AdRequest();
// Begin loading your interstitial
interstitial.loadAd(adRequest);
interstitial.setAdListener((MainActivity)mContext);
  }
});

由于