Autore Topic: AsynchHttp e JSON  (Letto 448 volte)

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
AsynchHttp e JSON
« il: 01 Agosto 2014, 23:24:49 CEST »
0
Salve gente. MI sono messo a leggera qualcosa in merito a Json. Ho prima provato e guardato la serializzazione e deserializzazione tramite l'uso della libreria Gson di google. Il tutto con una strina String aaa="{"time":"unadata"} creata come esempio. Quindi tutto in locale.

Ora, senza stare ad usare thread e asynktask, ho scoperto la libreria AsynkHttp http://loopj.com/android-async-http/
Ora l'ho implementata come segue:

Codice (Java): [Seleziona]
 private void getJsonIp() throws JSONException{
        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
        asyncHttpClient.get(url, null, new JsonHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                // If the response is JSONObject instead of expected JSONArray
                //response.getJSONObject("id");
                try {

                    JSONArray arr = new JSONArray(response);
                    JSONObject jObj = arr.getJSONObject(0);
                    String ilmioip = jObj.getString("ip");
                   
                } catch (JSONException e){}


            }

            @Override
            public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
                // Pull out the first event on the public timeline

            }
        });

    }

come url ho impostato: http://ip.jsontest.com/
come spiega il sito, ho ben 2 Override del metodo, uno nel caso di un array (quindi oggetto fra due []), oppure un unico oggetto che inizia e finisce con {}.

Quindi dovrebbe servirmi il primo metodo e basta?
la stringa ilmioip risulta essere vuota per non so quale motivo. L'unica cosa di cui sono sicuro è che response.toString() restituisce esattamente la stringa {"ip":"444.55.66.77"}, quindi la parte di rete funziona.

Come posso procedere?
Grazie

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:AsynchHttp e JSON
« Risposta #1 il: 02 Agosto 2014, 09:44:46 CEST »
0
Se è racchiuso tra parentesi graffe non è un oggetto array, è l'altro.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:AsynchHttp e JSON
« Risposta #2 il: 02 Agosto 2014, 18:40:25 CEST »
0
Quindi cosa dovrei fare?

Post unito: [time]02 Agosto 2014, 19:18:15 CEST[/time]
Update:

Facendo normalmente response.getString("ip"), riesco a ricavarmi la stringa "45.566.355" dell,ip, e volendo posso fare cosi per ogni valore e costruirmi l'oggetto;

seguendo la guida per Gson mi ritrovo a fare;
Codice (Java): [Seleziona]
 Gson gson = new Gson();
                    myIP = gson.fromJson(response.toString(),MyIP.class);
                   

dove MyIp.class è una classe del tipo:
Codice (Java): [Seleziona]
public class MyIP implements Serializable {

    private String id;

    public String getId(){
        return id;
    }
    public void setId(String id){
        this.id = id;
    }

   
}

Eppure richiamando il mio oggetto col metodo .getId(), mi ritorna vuoto, perchè?

Post unito: 02 Agosto 2014, 19:27:36 CEST
OK,update nuovo:

Ho visto che importando:
import com.google.gson.annotations.SerializedName;

e mettendo le annotazioni del tipo  @SerializedName("ip");  con lo stesso nome del nome campo della response sono riuscito a creare il mio oggetto. Magari ora provo con response più complicate.
« Ultima modifica: 02 Agosto 2014, 19:27:36 CEST da tonno16, Reason: Merged DoublePost »