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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器