как я могу проверить подключение к Интернету перед выполнением HTTPClient

Я создаю приложение для Android, которое вызывает сервисы отдыха, созданные мной на сервере, и сервер работает в прямом эфире, но из-за проблем с подключением к Интернету некоторое время мое приложение работает успешно, но иногда оно дает сбой. Код для моего класса соединения выглядит так

public class CommunicationClass {

@SuppressWarnings("unused")
private static final String TAG = null;
public String Domain;
public HttpClient client;
public HttpPost datapost;
public HttpResponse response;
public BufferedReader reader;
public StringBuilder builder;
public JSONTokener tokener;
public JSONObject finalResult;
List<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>(10);


public void setClient() {
    // TODO Auto-generated method stub
    client = new DefaultHttpClient();
    System.out.println("Created http client");
}
public void setDomain(String st) {
    // TODO Auto-generated method stub
    Domain = st;
    System.out.println("Domain has been set");
}
public void setResponse(){
    response=null;
    System.out.println("Response has been initalized by null");
}
public void setStringBuilder(){
    builder = new StringBuilder();
}
public void setreader(){
    try {
        reader = new BufferedReader(new InputStreamReader(this.response.getEntity().getContent(), "UTF-8"));
        System.out.println("Setting the contents of the Reader");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        System.out.println("In the UnsupportedEncodingException catch of the Reader");
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        System.out.println("In the IllegalStateException catch of the Reader");
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        System.out.println("In the IOException catch of the Reader");
        e.printStackTrace();
    }

}
public void startpost(String str){
    datapost=new HttpPost(str);
    System.out.println("Created the httppost domain");
}
public void insertdata(String tag,String value){
    namevaluepairs.add(new BasicNameValuePair(tag,value));
    System.out.println("Added the parameter  "+tag);
}
public void trydata(){
    try {
        this.datapost.setEntity(new UrlEncodedFormEntity(this.namevaluepairs));
        System.out.println("Setting the entity");
        try {
            this.response = this.client.execute(this.datapost);
            System.out.println("executing the client");
             if(this.response != null){
                 System.out.println("i am in if of this.response!=null");
             }
             else{
                 System.out.println("i am in else of this.response!=null");
             }
             System.out.println("in response try box");
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            System.out.println("in ClientProtocolException Catch box");
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("in IOException Catch box");
            e.printStackTrace();
        }
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        System.out.println("in UnSupported Catch box");
        e.printStackTrace();
    }
}
public void readresponse(){     



    try {
        for (String line = null; (line = reader.readLine()) != null;) {
            builder.append(line).append("\n");

        }
        System.out.println(this.builder);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     tokener = new JSONTokener(builder.toString());
    try {
         finalResult = new JSONObject(tokener);
        System.out.println("I am in try block of json final result reading");
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        System.out.println("I catch block of jsonException");
        e.printStackTrace();
    } 
}


}

это дает мне ошибку в строке trydata(); которые фактически выполняют HTTP-клиент, поэтому я хочу убедиться, что он не должен падать из-за подключения к Интернету, но может выдать исключение, которое можно поймать или сделать тост. Ребята нужна помощь в этом

Спасибо!


person Naveed Yousaf    schedule 12.12.2013    source источник
comment
Я проверил подключение к Интернету перед запуском приложения, если Интернет недоступен, оно будет запущено, но не будет работать. Я спрашиваю, почему происходит сбой при попытке обработки данных (); который на самом деле выполняет клиент, он отображает настройку объекта в logcat, а затем длинные строки красной ошибки, почему он падает????   -  person Naveed Yousaf    schedule 12.12.2013


Ответы (4)


private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

и не забывайте:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

это отличная работа для меня.

person s_bei    schedule 12.12.2013

Перед вызовом Webservice проверьте подключение к Интернету:

 public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager
                .getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
person Sharmilee    schedule 12.12.2013

Хотя другие ответы верны, они частично верны. Если вы хотите знать, что у вас есть подключение к Интернету, а не просто подключение к точке доступа Wi-Fi, вам нужно пропинговать сайт. Это я нашел вчера и работает, если вы подключены, но не имеете подключение к интернету через эту точку доступа. В основном он пингует гугл. Используйте с ним логическое значение и поместите его в галочки в чеках ответов других людей.

person Yordan Lyubenov    schedule 12.12.2013

Использовать это:

public static Boolean checkForInternetConnection(Context context) {
    final ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
    if (activeNetwork != null && activeNetwork.isConnected()) {
        return true;
    } else {
        return false;
    }

}
person Abhishek Shukla    schedule 12.12.2013
comment
Эта строка проверяет подключение к Интернету. Я проверил ее, как только приложение запускается, оно проверяет подключение к Интернету, и если Интернет подключен, то приложение будет работать, в противном случае это не так. Я говорю, что у меня есть пользователь, только что вошедший в систему, у него было подключение к Интернету. и пока он перемещается из одной комнаты в другую, это приложение войдет в него, но не вызовет метод редактирования на сервере, а вылетит из-за того, что оно вылетает из-за выполнения клиента. - person Naveed Yousaf; 12.12.2013