我正在创建一个依赖于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;
}
}
}
答案 0 :(得分:0)
使用倒数计时器尝试:
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();
还要确保添加互联网连接的清单权限
答案 1 :(得分:0)
我建议你看看这个问题 How to set HttpResponse timeout for Android in Java
您需要设置HttpConnectionParams。
答案 2 :(得分:0)
我认为是一个选项,
获取一个全局变量秒。用零初始化它。现在将您的web服务代码放在一个线程内,同时(true)或while(flag)循环。当你因为任何事情没有得到回应时,你可以用catch块获得它。在那里增加全局变量值。将线程睡眠放入内部持续调用Web服务的时间间隔。现在,在捕获异常的位置放置if条件,如果全局变量和用户定义变量匹配则打破循环。并完成了。 :)
我建议你在线程内部运行web服务调用,因为有时没有线程的调用会冻结UI线程。