为了绘制设了几个独立的类,我想通过abMob实现,从game类中调用然后将activity作为参数传递。
public void drawAddMob(Activity a){
LinearLayout ll = new LinearLayout(a);
ll.setPadding(0, 50, 0, 0);
adView = new AdView(a, AdSize.BANNER, "a15140cd49b6e7b");
AdRequest request = new AdRequest();
adView.loadAd(request);
adView.setVisibility(View.VISIBLE);
ll.addView(adView);
ll.draw(canvas);
}
结果出错:
03-21 23:35:09.646: W/System.err(333):
java.lang.RuntimeException: Can't create handler
inside thread that has not called Looper.prepare()
03-21 23:35:09.656: W/System.err(333):
at com.google.ads.internal.AdWebView.<init> (SourceFile:69)
ChatGPT尝试为您解答,仅供参考
这个错误通常是在非主线程中尝试创建一个 Android 视图对象(如 AdView)时发生的。在 Android 中,更新 UI 的操作必须在主线程中进行。
为了解决这个问题,您可以使用 Activity.runOnUiThread() 方法将代码转移到主线程中执行。例如:
a.runOnUiThread(new Runnable() {
public void run() {
LinearLayout ll = new LinearLayout(a);
ll.setPadding(0, 50, 0, 0);
adView = new AdView(a, AdSize.BANNER, "a15140cd49b6e7b");
AdRequest request = new AdRequest();
adView.loadAd(request);
adView.setVisibility(View.VISIBLE);
ll.addView(adView);
ll.draw(canvas);
}
});
注意,在这种情况下,您还需要确保在主线程中调用 drawAddMob() 方法。
另外,您也可以使用 Android 的 AsyncTask 类来执行这些操作。 AsyncTask 可以在后台线程中执行耗时任务,然后在主线程中更新 UI。