我有一个Android应用程序,检查网站的可用性,然后传递消息“网站已连接”,如果网站可用或“网站关闭...请稍后再试”如果网站不可用。
但是我注意到我调试它时应用程序工作正常,但如果我通常从android工作室运行应用程序它会提供错误信息,无论网站是否已连接。
以下是我的代码: -
public boolean process() {
new Thread(new Runnable() {
@Override
public void run() {
// Do the processing.
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
String link = "https://www.google.co.in/?gfe_rd=cr&ei=5yZ0VoqxOMWM8QfW057wBQ";//this site was used to check for returning a valid connection
// String link="http://www.afjndfns.com/";//this site was used to check for returning not a valid connection
if (netInfo != null && netInfo.isConnected()) {
try {
URL url = new URL(link);
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
if (urlc.getResponseCode() == 200)
{ // 200 = "OK" code (http connection is fine).
connection=true;
}
else
{
connection=false;
}
} catch (IOException e) {
System.out.print("IOexception"+e);
}
}
}
}).start();
return connection;
}
变量连接是一个gloabal变量,默认设置为false。
在我的onCreate
方法中,我有TextView Setter。
if(process()==true)
{
tvIsConnected.setBackgroundColor(0xFF00CC00);
tvIsConnected.setText("Website Connected");
}
else
{ // code if not connected
tvIsConnected.setText("Website Down...please try again later");
}
我在Android Studio v.2.0预览版3和v.1.3上试过这段代码。
更新:正如@comrade建议调试线程与运行线程相比运行缓慢,所以我必须创建自己的异步任务,这是在单独的线程上运行并检查网站的状态。看到我的回答。
答案 0 :(得分:1)
当您在DEBUG模式下运行时,它会慢一点#34;比在NORMAL中,所以你的线程有机会完成工作并返回正确的结果。
您需要为异步请求使用正确的逻辑。您可以使用AsyncTask作为示例并在onPostExecute方法中更新tvIsConnected任务。有关AsyncTask检查this和异步工作检查this的详细信息。
答案 1 :(得分:0)
hi。您可以使用不可见的webView。
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
isPageLoaded=true;
return isPageLoaded;
}
public void onPageFinished(WebView view, String url) {
if(isPageLoading) {
tvIsConnected.setBackgroundColor(0xFF00CC00);
tvIsConnected.setText("Website Connected");
}
}
});
答案 2 :(得分:0)
在onCreate
方法中调用一个Asynctask类,它在后台检查连接。
protected void onCreate(Bundle savedInstanceState)
{
new ConCheck().execute();
}
连接检查器类
class ConCheck extends AsyncTask<Void,Void,Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setTitle("Please Wait....");
mProgressDialog.setMessage("Establishing connection to Server...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
// Do the check for connection.
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
String link = "https://www.google.co.in/?gfe_rd=cr&ei=5yZ0VoqxOMWM8QfW057wBQ";//pass your site here for connection checking
if (netInfo != null && netInfo.isConnected()) {
try {
URL url = new URL(link);
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
if (urlc.getResponseCode() == 200)
{ // 200 = "OK" code (http connection is fine).
connection=true;
}
else
{
connection=false;
}
} catch (IOException e) {
System.out.print("IOexception"+e);
}
}
return null;
}
protected void onPostExecute(Void result) {
//do your post checking work here.
if(connection)
{
tvIsConnected.setBackgroundColor(0xFF00CC00);
tvIsConnected.setText("Servers Connected");
}
else
{ // code if connected
//tvIsConnected.setBackgroundColor(0xFF00CC00);
tvIsConnected.setText("Server Down...please try again later");
}
mProgressDialog.dismiss();
}
}
基本上,这个班级检查网站或服务器是否可用。老实说,我无法在StackOverflow
中的任何地方找到更好的答案