Retrofit给了我这个错误
原始
[{"DeviceName":"Samsung Galaxy A5","Brand":"Samsung"...},{"DeviceName":"Samsung Galaxy A5 Duos"... ...]
预计BEGIN_ARRAY,但在第1行第2栏路径为BEGIN_OBJECT $
@FormUrlEncoded
@PATCH("/v1/getphone/")
Call<List<Phone>> getPhoneInfo(@Field("device") String device);
Java Class
public class Phone {
@SerializedName("DeviceName")
@Expose
public String DeviceName;
@SerializedName("Brand")
@Expose
public String Brand;
@SerializedName("technology")
@Expose
public String technology;
....
有任何帮助吗? 感谢
答案 0 :(得分:2)
将您的Phone类作为列表放在另一个类中:
public class Root {
private List<Phone> phone;
//getters and setters here
}
并更改此行:
Call<List<Phone>> getPhoneInfo(@Field("device") String device);
到
Call<Root> getPhoneInfo(@Field("device") String device);
答案 1 :(得分:1)
在改造中你需要一个数组名来创建一个类。你的json是有效的,但是响应没有任何数组名,所以它不能以这种方式解析。你必须通过在改造中获取响应中的json字符串来手动解析它
ApiServiceClient.getApiService().yourFunctionName().enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
try {
String jsonString=response.body().string();
Log.e(TAG, "onResponse: "+response.body().string());
//Parse your json here
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
}
});