您好我正在尝试使用改造但是我收到此错误: -
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
}]
答案 0 :(得分:0)
你想从你的API中获取一个对象列表(通过查看第一个字符),但是你的错误表明它需要一个Object(同样,通过查看第一个字符)。您在界面中使用Call<Model>
,表示您只需要返回一个Model
对象,而不是它们的列表。
尝试设置界面
public interface RemoteApi {
String BASE_URL = "xyz/";
@GET("api/Cards")
Call<List<Model>> getModel();
和其他代码一样
RemoteApi.Factory.getInstance().getModel().enqueue(new Callback<List<Model>>() {
@Override
public void onResponse(Call<List<Model>> call, Response<List<Model>> response) {
String responseString = String.valueOf(response);
textData.setText(responseString);
Log.e("--success--", responseString);
}
@Override
public void onFailure(Call<List<Model>> call, Throwable t) {
Log.e("--fail--", t.getMessage());
}
});