SachinKS 2013-03-22 06:43 采纳率: 0%
浏览 1036

canvas绘图中的adMob 出错

为了绘制设了几个独立的类,我想通过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)
  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-19 22:36
    关注

    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。

    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试