2015-01-10 29 views
0

У меня есть этот обычный код, чтобы делать HTTP-запросы на сервер.Как проверить подключение к Интернету перед тем, как сделать запрос

 HttpClient httpclient = new DefaultHttpClient(); 
     ... 
     HttpGet httpGet = new HttpGet(finalUri.toURI()); 
     httpGet.addHeader("Accept", "text/xml"); 

     response = httpclient.execute(httpGet); 

Это прекрасно работает при подключении к Интернету. Но когда нет подключения к интернету, код просто ждет долгое время на httpclient.execute(httpGet);, пока он не выйдет из строя и не выбросит исключение и не сработает приложение.

01-10 15:17:48.612 20692-20806/com.somepackage.somepackage E/EXCEPTION﹕ Unable to resolve host "myapi.myhost.com": No address associated with hostname 

Для исключения я могу поймать UnknownHostException e и обработать его. Но все-таки есть ли способ узнать, что интернет-соединение отсутствует?

+0

добавил http: // infront вашего url ?? –

+0

Для проверки того, подключен ли пользователь к этому сообщению, посмотрите следующее сообщение: http://stackoverflow.com/a/7071617/2857385 – tknell

ответ

1

Вы можете использовать NetworkInfo.

private boolean checkNetworkConnection() { 
    NetworkInfo networkInfo = ((ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 
    if (networkInfo == null || !networkInfo.isConnected()) { 
     return false; 
    } else { 
     return true; 
    } 
} 
0

Это работает для меня.

public boolean IsInternetAvailable(Context context) 
{ 

    ConnectivityManager connectivityManager 
      = (ConnectivityManager) (context.getSystemService(Context.CONNECTIVITY_SERVICE)); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 
0

Другим способ проверки состояния подключения к Интернету с типом подключения:

public boolean getConnectionStatus(Context context) { 
int conn = NetworkUtil.getConnectivityStatus(context); 
if (conn == NetworkUtil.TYPE_WIFI||conn == NetworkUtil.TYPE_MOBILE) { 
    return true; 
} 
else{ 
    return false 
} 

} 
0

Я хотел бы предложить, чтобы проверить это, как наложенный слой можно проверить с помощью стандартного java.net.URLConnection класса просто.

try{ 
    URLConnection urlConnection = finalUri.openConnection(); 
    urlConnection.connect(); 
} 
catch(Exception ex){ 
    //No connection to finalUri 
    // return your error code for no connection 
} 
0

Добавить новый метод в ваш текущий Activity или Fragment:

private boolean isNetworkAvailable(){ 
     boolean available = false; 
     /** Getting the system's connectivity service */ 
     ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

     /** Getting active network interface to get the network's status */ 
     NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 

     if(networkInfo !=null && networkInfo.isAvailable()) 
      available = true; 

     /** Returning the status of the network */ 
     return available; 
    } 

А вот как его использовать. Вы можете использовать его внутри метода onCreate():

if (isNetworkAvailable() == true){ // if network is available 
    // do your thing here 
    ... 
}else{ // "else" means that the network is not available 
    // do your thing here 
    ... 
} 
Смежные вопросы