2014-10-08 2 views
7

Привет, я новичок в библиотеке Retrofit, у меня возникают проблемы с разбором некоторых json. Я рассмотрел некоторые другие решения на Stackoverflow, но не имел большой удачи в моей проблеме. я пытаюсь получить простой веб-сервис для работы. любые предложения будут с благодарностью оценили ..Ошибка отбрасывания догадки Ожидаемый BEGIN_OBRAY, но был BEGIN_OBJECT

JSon файлу

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

Запрос метод

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); 
} 

на им ошибку Геттинг

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 $ 

Я понимаю, что ошибка говорит данные объект, и он должен начать с массивом, но я не могу работать его .. Спасибо

ответ

7

Вы смесительные Employees и employeesclass классов. Попробуйте использовать вместо этого:

public class Employees { 

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

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

    } 

    // employeesclass definition 

} 

Затем измените свой интерфейс и requestEmployeeData метода соответственно

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

переименование также 'Сотрудник/employeesclass' к чему-то вроде' EmployeesWrapper/Employee', например, должен сделать это легче понять , – Salem

+1

Спасибо. что сработало .. веб-сервис успех :-) – n4zg

+0

спасибо, что сработало для меня – souttab