我想检查网络连接是否可用。如果它不可用,那么我显示一个对话框,然后单击对话框中的确定按钮,然后我再次需要检查网络连接等等。在这里我一次又一次地调用相同的方法。问题是在对话框中单击ok按钮调用相同的方法,但对话框没有关闭。
如果我们一次又一次地调用相同的方法,任何人都知道如何关闭对话框。
例如
private void checkConnection()
{
if (!networkAvailable())
{
int reply = Dialog.ask(Dialog.OK,"Network not available");
if (reply == Dialog.OK)
{
checkConnection();
}
}
由于 Mindus
答案 0 :(得分:0)
以上是上面的一个实现,它是在循环而不是递归中处理的,这样可以更容易地管理结束条件:
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()的方法是什么。它可能是阻塞的,在这种情况下我们需要重新编写代码以使其脱离事件线程。
但我想我的主要担心是我不确定这是一个很好的用户体验。我认为您需要从用户的角度来看待这一点,并考虑如果没有可用的网络,他们会想要发生什么。我不相信给他们一个对话,这是最佳的解决方案。
答案 1 :(得分:-1)
通过查看您的方法,您可以查看互联网连接的循环过程,只有在进行互联网连接时才会结束。
关闭此对话框的另一种方法是设置计数器变量。
试试这段代码:
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,因此该对话框将被取消。
一分钟后,此线程将被唤醒,您的互联网检查方法将继续。