2014-10-08 16 views
7

Ciao, sono nuovo nella libreria di Retrofit, sto riscontrando problemi nell'analisi di alcuni json. Ho esaminato alcune altre soluzioni su Stackoverflow ma non ho avuto molta fortuna con il mio problema. Sto cercando di far funzionare un semplice webservice. Ogni suggerimento sarà riconoscente apprezzato .. file diErrore di lancio retrofit Era previsto BEGIN_ARRAY ma era BEGIN_OBJECT

JSON

{"employees":[ 
{"firstName":"John", "lastName":"Doe"}, 
{"firstName":"Anna", "lastName":"Smith"}, 
{"firstName":"Peter", "lastName":"Jones"} 
]} 

metodo Richiesta

public void requestEmployeeData(String uri){ 
     RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ENDPOINT).build(); 
     EmployeesAPI employeesAPI =adapter.create(EmployeesAPI.class); 
     employeesAPI.getEmployees(new Callback<List<Employees.employeesclass>>() { 
      @Override 
      public void success(List<Employees.employeesclass> employees, Response response) { 
       List<String> names = new ArrayList<String>(); 
       Log.v("nas", "The Employees Webservice Success" + response); 
      } 

      @Override 
      public void failure(RetrofitError retrofitError) { 
       Log.v("nas", "The Employees Webservice Failed " + retrofitError); 
      } 
     }); 
    } 

Employees.java

public class Employees { 
// List<String> listOfStrings = new ArrayList<String>(); 
@SerializedName(value="employees") 
public List<Employees> employees; 

public void setEmployees(List<Employees> employees) { 
    this.employees = employees; 

} 

public static class employeesclass { 
    String firstName; 
    String lastName; 


    @Override 
    public String toString() { 
     return (firstName + " " + lastName); 

    } 
} 

} 

EmployeesAPI.java

public interface EmployeesAPI { 
@GET("/get_names.json") 
public void getEmployees(Callback<List<Employees.employeesclass>> response); 
} 

le im errore preliminari è

The Employees Webservice Failed retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 

Capisco l'errore sta dicendo i dati è un oggetto e dovrebbe iniziare con una matrice, ma i cant lavorare fuori .. Grazie

risposta

7

si stia mescolando Employees e classi employeesclass. Provare a utilizzare questo, invece:

public class Employees { 

    @SerializedName(value="employees") 
    public List<employeesclass> employees; 

    public void setEmployees(List<employeesclass> employees) { 
     this.employees = employees; 

    } 

    // employeesclass definition 

} 

Quindi modificare l'interfaccia e requestEmployeeData metodo di conseguenza

public interface EmployeesAPI { 
    @GET("/get_names.json") 
    public void getEmployees(Callback<Employees> response); 
} 
+0

anche rinominare 'I dipendenti/employeesclass' a qualcosa come' EmployeesWrapper/Employee' per esempio dovrebbe rendere più facile da capire . – Salem

+1

Grazie. che ha funzionato .. il servizio web un successo :-) – n4zg

+0

grazie che ha funzionato per me – souttab

Problemi correlati