2015-06-18 2 views
1

Мне нужно разобрать список объектов, которые могут быть использованы. {"data":[]} Я использую tamplated обратный вызов CallBack<T> вызвана сRetrofit parse empy array []

public static DataList { 
    public List<Data> data 
}; 

api.getData(new Callback<DataList>() {...}); 

это разбившийся с ошибкой: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com...DataList Пожалуйста, помогите

ответ

1

Ваша модель должна работать нормально. Возможно, ваш сервер не возвращает то, что, по вашему мнению, он делает, или, может быть, его не application/json, что он возвращает?

Вот краткий демо:

Выполнение GET на URL http://www.mocky.io/v2/5583c7fe2dda051e04bc699a возвращает следующую JSON:

{ 
    data: [ ] 
} 

Если вы запустите следующий класс, вы будете видеть это работает просто отлично:

public class RetrofitDemo { 

    interface API { 

    @GET("/5583c7fe2dda051e04bc699a") 
    void getDataList(Callback<DataList> cb); 
    } 

    static class DataList { 

    List<Data> data; 
    } 

    static class Data { 
    } 

    public static void main(String[] args) { 

    API api = new RestAdapter.Builder() 
     .setEndpoint("http://www.mocky.io/v2") 
     .build() 
     .create(API.class); 

    api.getDataList(new Callback<DataList>() { 

     @Override 
     public void success(DataList dataList, Response response) { 
     System.out.println("dataList=" + dataList); 
     } 

     @Override 
     public void failure(RetrofitError retrofitError) { 
     throw retrofitError; 
     } 
    }); 
    } 
} 
+0

Будет ли это работать, если getList является общим методом? – punksta

+0

@StasShakirov, я не уверен, что вы имеете в виду. Почему бы вам не попробовать? –

+0

Это не сработало. Попытка понять, почему – punksta

0

Ваш вопрос ваша модель Java не отражает данные, которые он пытается десериализации в.

//{"data":[]} does not map to List<Data> data. 
// If the server was just returning an array only then it would work. 
// It will match to the entity below make sure your cb = Callback<MyItem> 
public class MyItem { 
    List<Data> data; 
} 
+0

Я сделал это. DataList также является общедоступным статическим классом. – punksta