最近在做一个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应用安全——代码安全(android代码混淆)
  2. Android signed APK程序正式签名方法详解
  3. Android Studio如何设置代码自动提示
  4. Android Studio中获取sha1证书指纹数据的方法
  5. 在Android中用纯Java代码布局
  6. Android内置应用到系统的方法总结
  7. AlertDialog实现普通对话框和登录对话框——Android

随机推荐

  1. 使用HTML来生产Android界面
  2. android混淆代码bug跟踪
  3. android onPause()和onStop()区别
  4. Android(安卓)WebView内容宽度自适应
  5. Android(安卓)动画有拖影
  6. Android捕获全局异常信息并实现上传
  7. Android事件分发机制学习笔记
  8. android命令
  9. Android(安卓)模拟器创建参数说明
  10. Android(安卓)Studio使用profile简单优雅