在我的游戏中,我有一个构建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不扩展任何类,并且现在不实现任何接口。对此有何帮助?
答案 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);
}
});
由于