重试连接实现时遇到问题

Having trouble with retry connection implementation

这段代码有问题吗? 它没有 return true。总是瞬间falsereturn.

public boolean chkCon() {
        try {
            URL url = new URL("http://google.com");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            int code = connection.getResponseCode();
            return code == 200;
        } catch (Exception e){
            return false;
        }
    }

如果我设置:

public boolean chkCon() {
  return true;  // it works
}

像这样检查是否存在有效的互联网连接:

private boolean isNetworkConnected() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
}

检查特定服务器是否已启动:

// Host to check
String host = "http://www.google.com/";
//Timeout in millis
int timeout = 30000;
if(InetAddress.getByName(host).isReachable(timeOut)){
    //Successful ping
}else{
    //Unsuccessful ping
}

发生这种情况是因为发生异常。您的代码的问题是您在主线程上有一个网络调用。为避免发生该异常,请使用以下代码。

public class MainActivity extends AppCompatActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new MyAsyncTasck().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}

public class MyAsyncTasck extends AsyncTask<Void, Void, Boolean> {

    @Override
    protected Boolean doInBackground(Void... voids) {
        return chkCon();
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        String result = "Your result is " + aBoolean;
    }
}

public boolean chkCon() {
    try {
        URL url = new URL("http://google.com");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        int code = connection.getResponseCode();
        return code == 200;
    } catch (Exception e){
        return false;
    }
}

} 希望对你有帮助。