Autore Topic: Ice Cream VS Gingerbread e la chiamata http  (Letto 1015 volte)

Offline Iarlia

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
Ice Cream VS Gingerbread e la chiamata http
« il: 03 Maggio 2012, 14:51:25 CEST »
0
Buongiorno,
mi son data alla programmazione Android da un pò di mesi e per fortuna che ci sono i vostri tutorial ad aiutarmi (Praise the Lords!), andava tutto bene a programmare in Gingerbread...poi arrivò il Nexus con Ice Cream.
Ho visto che anche qualcun altro ha una situazione analoga, ma nonostante le ricerche non ho trovato ancora la soluzione o un qualcosa che sembrasse una soluzione.

Sto cercando di connettermi con la mia app ad un server, dove ho un file php che mi restituisce un JSON, il tutto funziona sul Galaxy S con 2.3.6 (il codice è lo stesso).
Mentre quando l'app gira su Nexus, non riesce proprio a connettersi, ma non fa neanche il tentativo, e il LogCat dal telefono non dice nulla se non tirarmi in ballo No Longer Want com.google.android.apps.plus (pid): hidden #16.

LogCat di quando l'app funziona:

Codice: [Seleziona]
05-03 13:09:52.344: I/ActivityManager(69): Starting: Intent { cmp=/.Impostazioni (has extras) } from pid 382
05-03 13:09:52.702: V/response code(382): 200
05-03 13:09:52.722: I/Impostazioni(382):  json {"posts":[{"risultato":{"x9":"Napoli","x8":"Bari","x6":"Palermo","x7":"Genova","x4":"Firenze","x5":"Perugia","x2":"Pisa","x3":"Roma","x0":"Milano","x1":"Venezia"},"lung":10}]}
05-03 13:09:52.733: I/Impostazioni(382): jObject Venezia
05-03 13:09:52.733: E/LoginRequest(382): No value for x10
05-03 13:09:53.403: I/ActivityManager(69): Displayed /.Impostazioni: +1s37ms
05-03 13:09:58.483: D/dalvikvm(135): GC_EXPLICIT freed 109K, 47% free 3160K/5895K, external 6060K/7515K, paused 69ms

(il No value for x10 è un problema tutto mio e di come il json è fatto e gestito)

Quando invece non funziona(sul Nexus) mi da soltanto:

Codice: [Seleziona]
No Longer Want com.google.android.apps.plus (pid): hidden #16
05-03 13:09:52.344: I/ActivityManager(69): Starting: Intent { cmp=/.Impostazioni (has extras) } from pid
05-03 13:09:52.733: E/LoginRequest(382): null

Metto anche la parte della connessione:(è tutto dentro la try)

Codice (Java): [Seleziona]
HttpClient cli = new DefaultHttpClient();
                StringBuilder url = new StringBuilder("http://site1/citta.php?lista=si");
                HttpGet get = new HttpGet(url.toString());
                        HttpResponse r = cli.execute(get);
                       
       
                        Log.v("response code", r.getStatusLine()
                                        .getStatusCode() + "");
                       
                int status = r.getStatusLine().getStatusCode();
                if(status==200){
                        HttpEntity e = r.getEntity();
                        String data = EntityUtils.toString(e);
                       
                        JSONObject json = new JSONObject(data);
                   
                    Log.i(getClass().getSimpleName(), " json " +json);
                        JSONArray jArray = json.getJSONArray("posts");
                       
                        for (int i = 0; i < jArray.length(); i++) {       //funzione per prendere bene i dati del json (fatto maluccio, ma almeno funziona)
                                JSONObject e1 = jArray.getJSONObject(i);
                                int s1=e1.getInt("lung");
                                String s = e1.getString("risultato");
                                JSONObject jObject = new JSONObject(s);
                                Log.i(getClass().getSimpleName(), "jObject " +jObject.get("x1").toString());
                               
                                items = new String[s1];
                               
                                for(int j=0;j<=s1; j++){
                                        items[j]=(jObject.get("x"+j).toString());
                                }
                        }
                }


Sto diventando scema, l'unica conclusione a cui sono arrivata è che sia deprecato qualcosa. (tra l'altro l'app dovrebbe trovarmi anche latitudine e long e lo fa una volta ogni tanto, dipende da come si sveglia, ma va bè)

Grazie in anticipo!
« Ultima modifica: 03 Maggio 2012, 15:23:40 CEST da Iarlia »

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:Ice Cream VS Gingerbread e la chiamata http
« Risposta #1 il: 03 Maggio 2012, 15:04:12 CEST »
+1
La chiamata http viene gestita all'interno di un thread secondario?
Farlo sul thread principale (quello che gestisce la UI per intenderci) era una bad practice, ora semplicemente non funge più (per fortuna).

Offline Iarlia

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
Re:Ice Cream VS Gingerbread e la chiamata http
« Risposta #2 il: 03 Maggio 2012, 15:05:43 CEST »
0
ok, te lo dico tra poco se va, ho già predisposto il codice.







...fico, adesso è cambiato che funziona sull'emulatore, non su GB e non su Ice Cream
« Ultima modifica: 03 Maggio 2012, 15:13:53 CEST da Iarlia »

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Ice Cream VS Gingerbread e la chiamata http
« Risposta #3 il: 03 Maggio 2012, 15:06:41 CEST »
0
Come ha detto DarnellNajanReed, dovresti lavorare non nel thread principale: dovresti servirti o di un AsyncTask

Pero mi sembrava che desse un errore esplicito se facevi richieste http dal main thread! ;)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Ice Cream VS Gingerbread e la chiamata http
« Risposta #4 il: 03 Maggio 2012, 19:31:34 CEST »
0
è un po vecchio come tutorial, ma di sicuro funziona:
[facile] Aggiornare ListView popolata da un cursor + download e parsing JSON - Android Developers Italia
poi qui: [facile] Endless List, Una lista senza fine - Android Developers Italia

ho usato un metodo più aggiornato:
Codice (Java): [Seleziona]
        private String useHttpGet(URI url) throws NoHttpResponseException {
                String read = "";
                try {
                        HttpClient client = new DefaultHttpClient();
                        HttpGet request = new HttpGet();
                        request.setURI(url);
                        HttpResponse response = client.execute(request);
                        if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) throw new NoHttpResponseException("Response was not ok");
                        else read = convertStreamToString(response.getEntity().getContent());
                } catch (ClientProtocolException ex) {
                        Log.e(EndlessList.TAG, "ClientProtocolException:" + ex.getLocalizedMessage());
                        throw new NoHttpResponseException("Connection Error, No acceptable response");
                } catch (IOException ex) {
                        Log.e(EndlessList.TAG, "IOException:" + ex.getLocalizedMessage());
                        throw new NoHttpResponseException("Connection Error, No acceptable response");
                }
                return read;
        }
« Ultima modifica: 03 Maggio 2012, 19:33:11 CEST da Nicola_D »
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia