【问题标题】:Android 2.1: BadTokenException Error in AlertDialogAndroid 2.1:AlertDialog 中的 BadTokenException 错误
【发布时间】:2012-05-19 18:27:33
【问题描述】:

我有一个可以处理短信的 Android 应用程序。当新的短信到达 Android 时,将从我的班级调用代码,即“NEW_SMS”广播接收器。如您所知,我的“sms_recieved_class”中的“onReceive”方法获取了一些上下文(来自系统)。使用意图,我的短信广播接收器调用另一个对短信数据库执行某些操作的类(最初通过“onReceive”从系统获取的上下文用于通过发送另一个广播来调用来自其他类的代码)。

其他类与 sms 数据库一起使用,它也是一个广播接收器。它对上面提到的我的班级发送的广播做出反应。如果“弄乱”数据库出错,应用程序应显示自定义错误对话框。现在,问题来了!

自定义错误对话框代码:

public static void setUpError(Context act,String ERRMSG, StackTraceElement[] stack) {

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

    final StackTraceElement[] finStack = stack;
    final String errMsg=ERRMSG;
    final Context ctxFin = act;

    builder.setMessage(poruka)...setting up alert buttons...

    AlertDialog alert = builder.create();
    alert.show();

}

“alert.show()”行出错。我很困惑,因为当我尝试在我的应用程序可见时显示此对话框(并将“someAct.this”作为上下文传递)一切都很好。当我尝试使用取自“broadcastReceiver.onReceive”(由系统调用)的上下文显示警报时,出现错误。我做错了什么?

附:在 STOVF 上搜索答案后,每次解决方案都是“不要使用 getApplicationContext()”。由于手机收到新消息时调用的两个类都不是“活动”类型,我该怎么办?

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:

    首先,Dialog 需要屏幕上的 Activity(所以没有任何打开的 Activity,您无法显示 Dialog)。您可以做的是创建看起来像 Dialog 的活动。检查来自 SO 的this 问题。

    【讨论】:

    • 就是这样! :) 以及如何调用该活动并使其成为我的 AlertDialog 的主机?这对我来说是全新的方法......或者诀窍是在清单中创建一个具有一些特殊属性的普通“PopupActivity”,并在错误时调用该活动(并在 PopupActivity.onCreate 中以某种方式定义 alertDialog 的外观)?
    • 我没有做过类似的事情,但也许可以尝试使用具有上下文的 BroadcastReceiver(作为 onReceive() 方法中的参数)来启动新的 Activity?
    • 像轮子一样工作!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    相关资源
    最近更新 更多