我搜索了Stackoverflow,查看了Android Developer中的示例,以及一些书籍,我只是没有得到它。
我正在尝试显示一个中断程序流的AlertDialog Box。我见过的大多数例子都没有对话框后的代码,我需要程序停止执行,直到按下AlertDialog按钮。好像AlertDialog是从另一个线程创建的,我不知道如何检索该线程。
程序逻辑:如果解析不好,程序将强制关闭。我想让用户知道重新启动程序,一切都会正常工作。 (我正在删除并重新创建表格,并在程序重新开始时重新填充)
以下是一些代码:
if(database populated)
{
....code.....
if(parseok.contentEquals("Error"))
{
doForceClose();
}
displayDate = "Last: " + parseok; //I don't want the program to continue to here.
//Rest of code in the method. If I continue the program will Force Close
}
else
do something else
这是AlertDialog方法:
private void doForceClose()
{
String themessage = "Because some of the parameters have changed in the yada yada";
AlertDialog.Builder ad = new AlertDialog.Builder (this);
ad.setTitle("Internal Error");
ad.setMessage(themessage);
ad.setPositiveButton("Sorry", new OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
finish();
return;
}
});
ad.create();
ad.show();
}
除了广告没有显示,程序继续强行关闭。
显然我没有得到什么。有什么想法吗?
编辑:我在一个扩展Activity
的类中答案 0 :(得分:6)
我正在尝试显示一个中断程序流的AlertDialog Box。
在Android和其他各种UI系统中都不存在。
我需要程序停止执行,直到按下AlertDialog按钮。
不,你没有。事件驱动的编程已经使用了几十年。
程序逻辑:如果解析不好,程序将强制关闭。
这是你的代码 - 重写它以表现得更好。
我不希望程序继续在这里。
然后使用else
或return
或其他内容。
除了广告没有显示,程序继续强行关闭。
在主应用程序线程再次获得控制权来处理您的请求之前,您的对话框不会出现 - show()
是异步的。在此之前,你很可能会崩溃。
简而言之,您处理解析问题的策略存在根本缺陷。
答案 1 :(得分:2)
Commonsware的回复是正确的。让我试着用不同的话说同样的话。 警报对话框不会中断控制流。当程序等待输入时,它只是“左显示”。
因此序列 showAlert(“这是一条消息); showGallery(); 返回;
这只是暂时的。 解决这个问题的方法是将showGallery()函数调用放在来自AlertDialog的Positive响应中。
所以换句话说。如果你想用AlertDialog中断应用程序的流程(明智地指出这是错误的想法),那么在对话框之后将你想要执行的代码放入AlertDialog的onClick回调中。
答案 2 :(得分:0)
看起来很奇怪,我认为对话框需要时间才能在程序继续运行时出现,然后程序会在对话框之前按时间顺序(但不是以编程方式)遇到异常。 这就是我修复异常位置后得到对话的原因。