2016-07-12 53 views
5

HI Sono solo nuovo per il retrofit servizio e seguito questo tutorial https://www.simplifiedcoding.net/retrofit-android-tutorial-to-get-json-from-server/ funziona bene e ha voluto creare il mio molto proprio così ho usato un nuovo JSON web http://api.androidhive.info/contacts/ che contieneAndroid Retrofit alcuna risposta

{ 
"contacts": [ 
    { 
      "id": "c200", 
      "name": "Ravi Tamada", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c201", 
      "name": "Johnny Depp", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c202", 
      "name": "Leonardo Dicaprio", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c203", 
      "name": "John Wayne", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c204", 
      "name": "Angelina Jolie", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "female", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c205", 
      "name": "Dido", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "female", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c206", 
      "name": "Adele", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "female", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c207", 
      "name": "Hugh Jackman", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c208", 
      "name": "Will Smith", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c209", 
      "name": "Clint Eastwood", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c2010", 
      "name": "Barack Obama", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c2011", 
      "name": "Kate Winslet", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "female", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c2012", 
      "name": "Eminem", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    } 
] 

I implementato la mia propria interfaccia ContactAPI.java

public interface ContactsAPI { 
@GET("/contacts/") 
public void getContacts(Callback<List<Contact>> response);} 

e realizzato classe modello come questo Contact.java

public class Contact { 

@SerializedName("id") 
@Expose 
private String id; 
@SerializedName("name") 
@Expose 
private String name; 
@SerializedName("email") 
@Expose 
private String email; 
@SerializedName("address") 
@Expose 
private String address; 
@SerializedName("gender") 
@Expose 
private String gender; 
public String getId() {return id;} 
public void setId(String id) {this.id = id;} 
public String getName() {return name;} 
public void setName(String name) {this.name = name;} 
public String getEmail() {return email;} 
public void setEmail(String email) {this.email = email;} 
public String getAddress() {return address;} 
public void setAddress(String address) {this.address = address;} 
public String getGender() {return gender;} 
public void setGender(String gender) {this.gender = gender;}} 

poi finalmente implementato il mio Restadapter in MainActivity.class

public static final String ROOT_URL = "http://api.androidhive.info"; 
    private ListView listView; 
    private List<Contact> contacts; 
    RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build(); 
    ContactsAPI api = adapter.create(ContactsAPI.class); 

    api.getContacts(new Callback<List<Contact>>() { 
     @Override 
     public void success(List<Contact> list, Response response) { 
      Toast.makeText(MainActivity.this,list.toString(),Toast.LENGTH_SHORT).show(); 
      showList(); 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      //you can handle the errors here 
      Toast.makeText(MainActivity.this,"Error Occured:"+error.toString(),Toast.LENGTH_SHORT).show(); 
     } 
    }); 

L'App funziona senza problemi, ma dopo 4 secondi di ritardo sarà promt un errore che è pubblico fallimento vuoto (errore RetrofitError) io non so cosa sto manca ho controllato il mio codice e non riesco a trovare nulla di sbagliato mi aiuti grazie in anticipo.

+0

qual è il messaggio di errore? – Juvi

+0

conoscere l'errore sarebbe sicuramente di aiuto. Hai il permesso di internet nel manifest? – Blackbelt

+0

@Juvi - questo è l'errore che viene ai registri E/Surface: getSlotFromBufferLocked: buffer sconosciuto: 0xaa9ef1b0 – user3262438

risposta

1

se il JSON è questo è necessario una classe con:

public class Contacts { 
    @SerializedName("contacts") 
    @Expose 
    private List<Contact> contacts = new ArrayList<Contact>(); 

    /** 
    * 
    * @return 
    * The contacts 
    */ 
    public List<Contact> getContacts() { 
     return contacts; 
    } 

    /** 
    * 
    * @param contacts 
    * The contacts 
    */ 
    public void setContacts(List<Contact> contacts) { 
     this.contacts = contacts; 
    } 

} 

anche nel vostro ContactAPI.java interfaccia

public interface ContactsAPI { 
    @GET("/contacts/") 
    public void getContacts(Callback<Contacts> response); 
} 

controllare anche questo link perché c'è un problema con "+", questo error

+1

grazie per aver risposto signore ma l'unico risultato che mi ha dato il codice dato è "Contact @ 824ec91" Mi manca qualcosa? – user3262438

+1

Ok, ora capisco che il motivo per cui fornisci la classe Contatti è quello di fornire un elenco per l'oggetto, quindi ho bisogno di usare la mia classe Contact per chiamare i parametri dell'oggetto thx al mio amico e tu riduci il mio tempo di sviluppo a metà grazie tu! Saluti! – user3262438

Problemi correlati