2014-10-08 26 views
7

Merhaba Yenileme kitaplığı için yeniyim, bazı jsonları ayrıştırmakta sorun yaşıyorum. Stackoverflow'taki diğer çözümlere baktım ama benim sorunumda çok şansım olmadı. Çalışmak için basit bir web hizmeti almaya çalışıyorum. herhangi bir öneri minnettar olurum ..Retrofit atma hatası Beklenen BEGIN_ARRAY ancak BEGIN_OBJECT oldu

Json dosyayı

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

İstek yöntemi

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

hata im

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 $ 

hata veri bir nesnedir söylediğini anlamaya ve bu bir dizi ile başlamalıdır ama .. Sen Employees karıştırma Teşekkür

cevap

7

work it out olamaz ve employeesclass sınıfları. Bunun yerine bu kullanmayı deneyin:

public class Employees { 

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

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

    } 

    // employeesclass definition 

} 

Sonra arayüz ve buna göre

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

Ayrıca böyle bir şey için 'Çalışanlar/employeesclass' yeniden adlandırma requestEmployeeData yöntemini değiştirmek' EmployeesWrapper/Employee' örneğin daha kolay anlaşılması yapmalıdır . – Salem

+1

Teşekkürler. Bu çalıştı .. web hizmeti bir başarı :-) – n4zg

+0

benim için çalıştı teşekkür ederim – souttab

İlgili konular