我正在制作一个依赖于web服务的应用程序,为了让应用程序工作,我需要检查手机是否能够连接到该web服务。我首先检查手机是否有互联网连接,如果有,我会尝试连接到我的web服务。如果它可以连接到网站,一切正常,但如果我由于某种原因无法访问它,例如,如果我禁用了PC上的连接,应用程序仍会尝试连接到网站,导致强制关闭。有没有办法让应用程序尝试连接到web服务大约15秒,如果在这段时间内连接失败,它将停止。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (httpzRequest() == true) {
Toast t = Toast.makeText(this, "Success!", Toast.LENGTH_LONG);
t.setGravity(Gravity.CENTER, 0, 0);
t.show();
} else {
Toast t = Toast.makeText(this,
"There's a problem with your internet connection",
Toast.LENGTH_LONG);
t.setGravity(Gravity.CENTER, 0, 0);
t.show();
}
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager
.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
public boolean httpzRequest() {
if (isNetworkAvailable() == true) {
try {
HttpClient client = new DefaultHttpClient();
URI site = new URI("http://www.google.se/");
HttpGet request = new HttpGet();
request.setURI(site);
HttpResponse response = client.execute(request);
return true;
} catch (IOException e) {
e.printStackTrace();
System.out.println(e);
return false;
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
System.out.println(e);
return false;
}
} else {
return false;
}
}
}
发布于 2011-12-14 18:31:22
我建议你看看这个问题How to set HttpResponse timeout for Android in Java
您需要设置HttpConnectionParams。
发布于 2011-12-14 18:16:48
尝试使用倒计时计时器:
new CountdownTimer(30000, 1000) { //This is 30 seconds so change it to 1500 to make it 15 seonds
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!"); //Here run your code.
}
}.start();
还要确保您添加了用于internet连接的清单权限
发布于 2011-12-14 19:15:00
我认为唯一的选择是,
取一个全局变量作为秒数。将其初始化为零。现在,将您的webservice代码放在while(true)或while(flag)循环内的一个线程中。当你因为任何事情而没有得到响应时,你可以用catch块来得到它。在那里增加全局变量的值。将线程睡眠放在持续调用web服务的时间间隔内。现在,在捕获异常的地方,放入if条件,即if全局变量和用户定义的变量匹配,然后中断循环。一切都结束了。:)
我建议你在线程内运行web服务调用,因为有时没有线程的调用会使UI线程冻结一段时间。
https://stackoverflow.com/questions/8509400
复制相似问题