Autore Topic: Verifica connessione a server  (Letto 673 volte)

Offline rafanto

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Google+
    • rafanto
    • rafanto
    • rafanto
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Linux Ubuntu 12.10 + Ubuntu 13.04 + Fedora 18
Verifica connessione a server
« il: 09 Maggio 2013, 11:48:03 CEST »
0
Salve,
ho letto i vari post sul forum per quanto riguarda la verifica della connessione ed ho estrapolato del codice che mi fa questo controllo,

Codice (Java): [Seleziona]
       
public static boolean haveInternet(Context c) {
                NetworkInfo info = ((ConnectivityManager) c
                                .getSystemService(Context.CONNECTIVITY_SERVICE))
                                .getActiveNetworkInfo();
                if (info == null || !info.isConnected()) {
                        return false;
                }
                if (info.isRoaming()) {
                        return true;
                }
                return true;
        }

però io vorrei nello specifico verificare anche l'effettivo raggiungimento del server per verificare se è Up o Down e gestire l'eventuale eccezione

ho provato così ma non mi funziona

Codice (Java): [Seleziona]
        public static boolean isServerOK(Context context) {
               
                boolean result = false;
               
                if (haveInternet(context)) {
                try {
                        URL url = new URL(ClientSettings.SERVER_URL);
                        URLConnection conn = url.openConnection();
                        conn.setConnectTimeout(ClientSettings.CONN_TIMEOUT);
                        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
       
                        result = true;
                       
                }
                catch (Exception e) {
                        Log.e("isServerOK ERROR Exception ", "Error checking internet connection", e);
                }
               
                }
                else {
                Log.d("isServerOK ERROR haveInternet", "No network available!");
                result=false;
            }
               
                return result;
               
        }

mi va in eccezione direttamente
Codice: [Seleziona]
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709): android.os.NetworkOnMainThreadException
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.io.IoBridge.connectErrno(IoBridge.java:144)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.io.IoBridge.connect(IoBridge.java:112)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at java.net.Socket.connect(Socket.java:842)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at it.rafanto.carpooling.client.android.utils.ClientUtility.isServerOK(ClientUtility.java:51)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at it.rafanto.carpooling.client.android.LoginActivity.autenticate(LoginActivity.java:135)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at it.rafanto.carpooling.client.android.LoginActivity$1.onClick(LoginActivity.java:82)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at android.view.View.performClick(View.java:4204)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at android.view.View$PerformClick.run(View.java:17355)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at android.os.Handler.handleCallback(Handler.java:725)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at android.os.Handler.dispatchMessage(Handler.java:92)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at android.os.Looper.loop(Looper.java:137)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at android.app.ActivityThread.main(ActivityThread.java:5226)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at java.lang.reflect.Method.invokeNative(Native Method)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at java.lang.reflect.Method.invoke(Method.java:511)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
05-09 11:45:36.480: E/isServerOK ERROR Exception(10709):         at dalvik.system.NativeStart.main(Native Method)

grazie per l'eventuale supporto ed aiuto

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Verifica connessione a server
« Risposta #1 il: 09 Maggio 2013, 11:50:13 CEST »
0
NetworkOnMainThreadException è abbstanza autoesplicativa: non puoi lanciare una connessione HTTP sul main thread  :-)

Offline rafanto

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Google+
    • rafanto
    • rafanto
    • rafanto
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Linux Ubuntu 12.10 + Ubuntu 13.04 + Fedora 18
Re:Verifica connessione a server
« Risposta #2 il: 09 Maggio 2013, 11:54:22 CEST »
0
Ah ok .. quindi magari potrei con un AsyncTask effettuare il controllo !? o come mi consigli di fare ..?

grazie

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Verifica connessione a server
« Risposta #3 il: 09 Maggio 2013, 12:05:48 CEST »
0
L'importante è effettuare la chiamata HTTP su un thread diverso da quello principale (che controlla la UI).
Un AsyncTask può essere di certo una soluzione possibile.  :-)