Autore Topic: Discrepanza tra simulatore e dispositivo nell'accesso a internet  (Letto 553 volte)

Offline Vittorio

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sony xperia p
  • Play Store ID:
    Vittorio Calligaris
  • Sistema operativo:
    windows 7 / Ubuntu 12.10
0
Salve
ho un problema: sto creando una applicazione che scarica dei dati dalla rete
tutto sembra funzionare correttamente sul simulatore ma su dispositivi reali ho un errore nella connessione a internet,
ho impostato questo permesso:
<uses-permission android:name="android.permission.INTERNET" />

Ho dimenticato qualche altro permesso o qualche altro errore tipico?

Qualcuno può aiutarmi?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Discrepanza tra simulatore e dispositivo nell'accesso a internet
« Risposta #1 il: 31 Ottobre 2013, 08:48:28 CET »
0
Ma che genere di errore hai? Non si connette? Hai un LogCat da analizzare?
Se apri il browser dell'emulatore ci navighi?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Vittorio

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sony xperia p
  • Play Store ID:
    Vittorio Calligaris
  • Sistema operativo:
    windows 7 / Ubuntu 12.10
Re:Discrepanza tra simulatore e dispositivo nell'accesso a internet
« Risposta #2 il: 31 Ottobre 2013, 19:02:38 CET »
0
ecco il codice incriminato, scusa per non averlo inerito prima, speravo in qualche svista del principiante
il browser del simulatore funziona
il codice si connette a una pagina php per lavorare con i json
Codice (Java): [Seleziona]
        //http post
        try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("mio_sito.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();
        }catch(Exception e) {
                Log.e("TEST", "Errore nella connessione http "+e.toString());
                alert("Errore nella connessione http"+e.toString());
        }


l'errore che rileva è:
httpandroid.os.NetworkOnMainThreadException

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Discrepanza tra simulatore e dispositivo nell'accesso a internet
« Risposta #3 il: 31 Ottobre 2013, 19:22:39 CET »
0
il problema è che il device, e l'emulatore hanno 2 versioni diverse di android
da android 4.0.3 (se non sbaglio) non puoi effettuare chiamate internet nel thread principale. per farlo, crea un thread secondario, magari un asynctask

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Discrepanza tra simulatore e dispositivo nell'accesso a internet
« Risposta #4 il: 31 Ottobre 2013, 19:26:58 CET »
0
l'errore che rileva è:
httpandroid.os.NetworkOnMainThreadException

Come dice gabric, stai eseguendo richieste di rete nel main thread (se noti è scritto anche nel nome dell'eccezione), cosa che non è più permessa (era sconsigliatissimo anche prima, ma non generava errore).

Un modo molto rapido di risolvere lo trovi in questo tutorial minimale che ho scritto:
[facile] utilizzo della libreria android-async-http - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Vittorio

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sony xperia p
  • Play Store ID:
    Vittorio Calligaris
  • Sistema operativo:
    windows 7 / Ubuntu 12.10
Re:Discrepanza tra simulatore e dispositivo nell'accesso a internet
« Risposta #5 il: 31 Ottobre 2013, 19:36:16 CET »
0
Stavo giusto leggendo la tua guida, comunque le operazioni che eseguo non sono pesanti e non sforo i fatidici 5s, non esiste un modo per fare "un' eccezzione dell'eccezione"? ho trovato qualcosa tipo stictMode permit all ma non riesco a farlo funzionare...

P.S.
so che è sconsigliato non isultatemi

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Discrepanza tra simulatore e dispositivo nell'accesso a internet
« Risposta #6 il: 31 Ottobre 2013, 19:39:44 CET »
0
Stavo giusto leggendo la tua guida, comunque le operazioni che eseguo non sono pesanti e non sforo i fatidici 5s, non esiste un modo per fare "un' eccezzione dell'eccezione"? ho trovato qualcosa tipo stictMode permit all ma non riesco a farlo funzionare...

P.S.
so che è sconsigliato non isultatemi

I 5 secondi sono il limite per gli AsyncTask.

Per le connessioni di rete c'è bisogno di un thread a parte perchè a seconda del tipo di connessione e del server a cui ti colleghi, possono volverci 100 millisecondi o 30 secondi. Se tu lo facessi nel main thread, il telefono ti rimarrebbe congelato per tutta la durata della richiesta di rete e non potresti neanche rispondere alle telefonate.

Qual'è il problema ad utilizzare il metodo corretto?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store