【发布时间】:2017-05-30 11:55:18
【问题描述】:
我收到此错误:
java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 1 列路径 $
当我试图得到回应时。
我得到的 JSON 响应如下:
[
{
"site":"bash.im",
"name":"bash",
"desc":"Цитатник Рунета",
"link":"/url.html?url=http%3A%2F%2Fbash.im%2Fquote%2F445088",
"elementPureHtml":"Text"
},
{
"site":"bash.im",
"name":"bash",
"desc":"Цитатник Рунета",
"link":"/url.html?url=http%3A%2F%2Fbash.im%2Fquote%2F445087",
"elementPureHtml":"Text"
},
{
"site":"bash.im",
"name":"bash",
"desc":"Цитатник Рунета",
"link":"/url.html?url=http%3A%2F%2Fbash.im%2Fquote%2F445086",
"elementPureHtml":"Text"
}
]
我的模型课:
public class PostModel {
@SerializedName("site")
@Expose
private String site;
@SerializedName("name")
@Expose
private String name;
@SerializedName("desc")
@Expose
private String desc;
@SerializedName("link")
@Expose
private String link;
@SerializedName("elementPureHtml")
@Expose
private String elementPureHtml;
public String getSite() {
return site;
}
public void setSite(String site) {
this.site = site;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getElementPureHtml() {
return elementPureHtml;
}
public void setElementPureHtml(String elementPureHtml) {
this.elementPureHtml = elementPureHtml;
}
}
连接类:
public class App extends Application {
private static UmoriliApi umoriliApi;
@Override
public void onCreate() {
super.onCreate();
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.umori.li/")
.client(client)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
umoriliApi = retrofit.create(UmoriliApi.class);
}
public static UmoriliApi getApi() {
return umoriliApi;
}
}
和 MainActivity:
public class MainActivity extends AppCompatActivity {
List<PostModel> posts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
posts = new ArrayList<>();
App.getApi().getData("bash", 50).enqueue(new Callback<List<PostModel>>() {
@Override
public void onResponse(Call<List<PostModel>> call, Response<List<PostModel>> response) {
posts.addAll(response.body());
}
@Override
public void onFailure(Call<List<PostModel>> call, Throwable t) {
t.printStackTrace();
Toast.makeText(MainActivity.this, "An error occurred during networking", Toast.LENGTH_SHORT).show();
}
});
}
}
将不胜感激任何帮助或提示。
【问题讨论】:
-
响应中有错误,这就是 gson 无法将响应转换为模型类的原因。
-
我认为错误出在 Web 服务响应中,您可以在浏览器上测试请求以确保它与您的模型匹配
-
@Badr,我使用 jsonschema2pojo.org 服务根据 json 响应制作了我的模型
-
@Jaydeep Patel,你能提示一下,到底哪里出错了?
-
在 post man 中检查 web 服务。可能存在参数或响应问题。