Blackberry Dialog.ask()如何再次调用相同的方法
我想检查网络连接是否可用。如果不可用,则显示一个对话框,单击对话框中的“确定”按钮,然后再次检查网络连接等。在这里,我一次又一次地调用相同的方法。问题是在对话框中单击ok按钮时,它调用了相同的方法,但对话框没有关闭 如果我们一次又一次地调用相同的方法,有人知道如何关闭对话框吗 乙二醇 谢谢Blackberry Dialog.ask()如何再次调用相同的方法,blackberry,blackberry-simulator,Blackberry,Blackberry Simulator,我想检查网络连接是否可用。如果不可用,则显示一个对话框,单击对话框中的“确定”按钮,然后再次检查网络连接等。在这里,我一次又一次地调用相同的方法。问题是在对话框中单击ok按钮时,它调用了相同的方法,但对话框没有关闭 如果我们一次又一次地调用相同的方法,有人知道如何关闭对话框吗 乙二醇 谢谢 Mindus通过观察你的方法,你有一个检查互联网连接的循环过程,它只会在有输入和互联网连接时结束 关闭此对话框的另一种方法是设置计数器变量 请尝试以下代码: public static final int m
Mindus通过观察你的方法,你有一个检查互联网连接的循环过程,它只会在有输入和互联网连接时结束 关闭此对话框的另一种方法是设置计数器变量 请尝试以下代码:
public static final int mCounter = 1;
private void checkConnection() {
if (!networkAvailable()) {
if (mCounter != 5) {
int reply = Dialog.ask(Dialog.OK, "Network not available");
if (reply == Dialog.OK) {
mCounter++;
checkConnection();
}
} else {
mCounter = 1;
new Thread(new Runnable() {
public void run() {
Thread.sleep(60000);
checkConnection();
}
}).start();
}
}
}
由于此计数器变量将为5,此对话框将被取消
一分钟后,此线程将被唤醒,您的internet检查方法将再次继续。以下是上述方法的一个实现,它在循环中处理,而不是递归处理,从而更容易管理结束条件:
private void checkConnection() {
if (!networkAvailable()) {
boolean networkOK = networkAvailable();
int reply = Dialog.ask(Dialog.D_OK,"Network not available");
while (reply == Dialog.OK && !networkOK) {
networkOK= networkAvailable();
if ( !networkOK) {
reply = Dialog.ask(Dialog.D_OK,"Network not available");
}
} // end of while loop
}
} // end of method
此代码可以进一步优化,但如图所示,以明显的方式演示了所需的步骤
如果需要,也可以限制循环次数
不过,我有一些保留意见
从技术角度看,我不知道networkAvailable方法的作用。它可能是阻塞的,在这种情况下,我们需要重新编写此代码以使其脱离事件线程
但我想我主要担心的是,我不确定这是否是一个好的用户体验。我认为您需要从用户的角度来看待这一点,并思考如果没有可用的网络,他们希望发生什么。我不相信给他们这样的对话是最佳的解决方案 你不认为这会在循环过程中发生吗…???是的,我想实现这个过程。这段代码在我看来是错误的。我认为它可以在不在事件线程上时调用Dialog,我的快速回顾表明它永远不会停止递归调用checkConnection。您能检查并更正吗?@PeterStrange请阅读问题中给出的要求用户希望经常检查互联网连接。并希望关闭该对话框。因此,我认为没有任何其他解决方案可以替代此解决方案,如果有其他解决方案,请提供。两件事:1不工作的代码不是任何问题的解决方案-您的代码工作吗?2这里的问题可以通过许多方法轻松解决,最简单的方法是删除代码的递归调用和“循环”,直到满足某些最终条件。最终条件可能是网络可用或超出某些计数器,或者用户对对话框的响应为“否”。@PeterStrange那么您一定已经检查了我的代码。你最好回答这个问题并帮助用户找到解决方案。你最好回答这个问题,但是如果你修改了自己的代码,这不是也很有用吗?我认为你所做的方式是可行的,只是不像目前编码的那样。我还在另一个论坛上回答了这个问题,请参见:
private void checkConnection() {
if (!networkAvailable()) {
boolean networkOK = networkAvailable();
int reply = Dialog.ask(Dialog.D_OK,"Network not available");
while (reply == Dialog.OK && !networkOK) {
networkOK= networkAvailable();
if ( !networkOK) {
reply = Dialog.ask(Dialog.D_OK,"Network not available");
}
} // end of while loop
}
} // end of method