【发布时间】:2016-03-22 18:38:50
【问题描述】:
您好,我正在尝试使用改造但我收到此错误:-
java.lang.IllegalStateException: 应为 BEGIN_OBJECT 但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY
这是我的 MainActivity
public class MainActivity extends AppCompatActivity {
@Bind(R.id.activity_main_tv_display)
TextView textData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.activity_main_btn_show)
void press() {
RemoteApi.Factory.getInstance().getModel().enqueue(new Callback<Model>() {
@Override
public void onResponse(Call<Model> call, Response<Model> response) {
textData.setText(response.toString());
Log.e("--success--", String.valueOf(response));
}
@Override
public void onFailure(Call<Model> call, Throwable t) {
Log.e("--fail--", t.getMessage());
}
});
}
}
这是我的模特
public class Model {
@SerializedName("Title")
@Expose
private String Title;
@SerializedName("Message")
@Expose
private String Message;
@SerializedName("id")
@Expose
private int id;
// getters and setters declare
}
这是我的界面
public interface RemoteApi {
String BASE_URL = "xyz/";
@GET("api/Cards")
Call<Model> getModel();
class Factory {
public static RemoteApi remoteApi;
public static RemoteApi getInstance() {
Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build();
remoteApi = retrofit.create(RemoteApi.class);
return remoteApi;
}
}
}
我的 API 看起来像这样
[{
"Title": "xyz",
"Message": "hello",
"id": 1
}, {
"Title": "abc",
"Message": "hello",
"id": 2
}]
【问题讨论】:
-
您的 API 正在返回一个 JSON 数组。改造期待
Callback<Model>。试试Callback<List<Model>> -
你能解释更多@cricket_007吗
-
{}中的数据是一个 JSON 对象。[]中的数据是一个 JSON 数组。查看 API 的第一个字符。这是一个[。因此,您的错误报告是“was BEGIN_ARRAY”,而不是“BEGIN_OBJECT”。 -
但是当我将我的界面从 Call
getModel() 编辑到 Callback - > getModel() 时。它在我的 MainActivity 中创建错误,即无法解析方法 enqueue @cricket_007
-
那是因为您必须在您拥有
Callback和Call的所有地方将Model更改为List<Model>。
标签: android json gson retrofit2