最近在做一个libgdx的项目,遇到很多和android相关的技术问题,其中在android子项目中如何实现对话框提示信息就是一个,原以为很简单,就是构造一个Dialog,然后show出来,给个按钮关闭事件就可以了,没想到还是费了一番周折。

一、按照固有想法实现,出现问题。

将以下方法放到了项目业务逻辑判断方法中了,总之,没有放到onCreate方法之中。

AlertDialog.Builder builder = new AlertDialog.Builder(context);

builder.setTitle("提示");

builder.setMessage("微信客户端没有安装");

builder.setNegativeButton("确定", null);

builder.show();

出现问题:

08-07 10:44:04.850: E/AndroidRuntime(15528): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

网上有解决办法说:

在上面的代码的前后加上

Looper.prepare();

......

Looper.loop();

对话框成功提示了一次,然后程序就崩溃退出了。

然后在网上查找原因和解决办法,自己在没有了解清楚android消息机制之前,想快速解决这个问题,就是百度、google一顿搜,然后贴上网友的代码一顿试,后来又看到Handle、主线程、子线程和sendMessage之类的介绍,感觉好像应该试试

二、加入Handle,重新梳理思路,接近成功。

在onCreate方法中定义Handle,将对话框提示代码抽象出来写成方法,在业务逻辑处用handle.sendMessage(1),向主线程发送消息,处理消息中显示对话框。

onCreate中的代码:

mHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

showDialog(getBaseContext());

}

};

};

对话框方法代码:

private void showDialog(Context context) {

AlertDialog.Builder builder = new AlertDialog.Builder(context);

builder.setTitle("提示");

builder.setMessage("微信客户端没有安装");

builder.setNegativeButton("确定", null);

builder.show();

}

业务逻辑处调用代码:

Message msg = new Message();

msg.what = 1;

mHandler.sendMessage(msg);


结果红色代码块那里报错了:

08-07 15:35:16.687: E/AndroidRuntime(5057): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

有网友说:

必须使用Activity的Context对象

三、修改代码,成功显示。

将红色代码改成

MainActivity.this

注:该Activity就是你当前的要是对话框的Activity名称。

运行程序,成功显示对话框。


更多相关文章

  1. 【Android】直接连接SqlServer
  2. Android学习——MediaScanner源码分析
  3. 源码解析Android中的事件处理
  4. Android如何连接和操作SQLite数据库
  5. Android高手进阶教程(十七)之---Android中Intent传递对象的两种
  6. Android(安卓)播放视频示例
  7. Android(安卓)消息机制
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. 有关android中多级联动问题的解决
  2. Android(安卓)setTag()/getTag()-
  3. Android(安卓)DataPickerDialog组建只显
  4. Android手机上监听短信的两种方式
  5. 2014.01.21(2)——— android开发实例之vie
  6. mac系统连接Android手机
  7. 自定义Android,toast,以及多线程toast
  8. 解决Gradle minifyEnabled无法找到错误
  9. 在Android系统中调用系统前置摄像头
  10. Android的图片叠加