java.lang.illegalstateException:预期BEGIN_OBJECT但BEGIN_ARRAY改造
我得到了错误java.lang.illegalstateException:预期BEGIN_OBJECT但行1列42是BEGIN_ARRAY当与改造呼叫API,这里是我的代码:java.lang.illegalstateException:预期BEGIN_OBJECT但BEGIN_ARRAY改造
下面是我的界面:
@FormUrlEncoded @POST("myCollection")
Call<APIResponse<List<MyCollection>>> getMyCollection(
@Field("caller_id") String caller_id
);
这里是召唤:
public class UploadVideoToneActivity extends BaseActivity{ List<MyCollection> collection = new ArrayList<>();
private void loadCollection() {
ContactItem callerID = SessionManager.getProfile(this);
Call<APIResponse<MyCollection>> call = ServicesFactory.getService().getMyCollection(callerID.caller_id);
call.enqueue(new Callback<APIResponse<MyCollection>>() {
@Override
public void onResponse(Call<APIResponse<MyCollection>> call, Response<APIResponse<MyCollection>> response) {
if (response.isSuccessful() && response.body().isSuccessful()) {
List<MyCollection> data = (List<MyCollection>) response.body().data;
if (data != null) {
collection.clear();
collection.addAll(data);
rvCollection.getAdapter().notifyDataSetChanged();
}
}
else {
Toast.makeText(UploadVideoToneActivity.this, response.errorBody().toString(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<APIResponse<MyCollection>> call, Throwable t) {
Toast.makeText(UploadVideoToneActivity.this, t.getLocalizedMessage(), Toast.LENGTH_LONG).show();
}
});
}
这里是JSON格式响应从API, 下面是API的格式JSON响应,
{ "code": 200,
"error_message": null,
"data": [
[
{
"caller_id": "44",
"content_id": "003",
"alias": "Eli Sugigi",
"judul": "Angkat sekarang juga",
"source_content": "http://bla.bla.mp4",
"thumb_pic": "http://bla.bla.mp4",
"sub_start": "2017-12-27 14:17:10",
"sub_end": "2018-01-03 00:00:00"
}
],
[
{
"caller_id": "44",
"content_id": "002",
"alias": "Eli Sugigi",
"judul": "Mas Ganteng Angkat Dong",
"source_content":"source_content": "http://bla.bla.mp4",
"thumb_pic": "http://bla.bla.mp4",
"thumb_pic":"source_content": "http://bla.bla.mp4",
"thumb_pic": "http://bla.bla.mp4",
"sub_start": "2017-12-27 15:52:40",
"sub_end": "2018-01-03 00:00:00"
}
]
]
}
这里是MyCollection的类:
public class MyCollection implements Parcelable { @SerializedName("content_id")
@Expose
public String content_id;
@SerializedName("alias")
@Expose
public String alias ;
@SerializedName("judul")
@Expose
public String judul;
@SerializedName("source_content")
@Expose
public String source_content;
@SerializedName("thumb_pic")
@Expose
public String thumb_pic;
@SerializedName("sub_start")
@Expose
public String sub_start ;
@SerializedName("sub_end")
@Expose
public String sub_end ;
protected MyCollection(Parcel in) {
content_id = in.readString();
alias = in.readString();
judul = in.readString();
source_content = in.readString();
thumb_pic = in.readString();
sub_start = in.readString();
sub_end = in.readString();
}
public static final Creator<MyCollection> CREATOR = new Creator<MyCollection>() {
@Override
public MyCollection createFromParcel(Parcel in) {
return new MyCollection(in);
}
@Override
public MyCollection[] newArray(int size) {
return new MyCollection[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(content_id);
parcel.writeString(alias);
parcel.writeString(judul);
parcel.writeString(source_content);
parcel.writeString(thumb_pic);
parcel.writeString(sub_start);
parcel.writeString(sub_end);
}
}
回答:
您提供的所有JSON首先是不正确的:
这是正确的JSON:
{ "code": 200,
"error_message": null,
"data": [{
"caller_id": "44",
"content_id": "003",
"alias": "Eli Sugigi",
"judul": "Angkat sekarang juga",
"source_content": "http://bla.bla.mp4",
"thumb_pic": "http://bla.bla.mp4",
"sub_start": "2017-12-27 14:17:10",
"sub_end": "2018-01-03 00:00:00"
},
{
"caller_id": "44",
"content_id": "002",
"alias": "Eli Sugigi",
"judul": "Mas Ganteng Angkat Dong",
"source_content": "http://bla.bla.mp4",
"thumb_pic": "http://bla.bla.mp4",
"sub_start": "2017-12-27 15:52:40",
"sub_end": "2018-01-03 00:00:00"
}
]
}
后来你的回应类用这个作为响应等级:
public class MyResponseClass {
private String error_message;
private ArrayList<Data> data;
private String code;
public String getError_message()
{
return error_message;
}
public void setError_message (String error_message)
{
this.error_message = error_message;
}
public ArrayList<Data> getData()
{
return data;
}
public void setData (ArrayList<Data> data)
{
this.data = data;
}
public String getCode()
{
return code;
}
public void setCode (String code)
{
this.code = code;
}
@Override
public String toString()
{
return "ClassPojo [error_message = "+error_message+", data = "+data+", code = "+code+"]";
}
}
后来使用MyResponseData作为您的改进数据解析器:
ContactItem callerID = SessionManager.getProfile(this); Call<MyResponseData> call = ServicesFactory.getService().getMyCollection(callerID.caller_id);
,并在您onResponse:
@Override public void onResponse(Call<MyResponseData> call, Response<MyResponseData> response) {
if (response.isSuccessful() && response.body().isSuccessful()) {
//here collection will be arraylist of MyCollection class
collection.clear();
collection.addAll(response.body().getData());
rvCollection.getAdapter().notifyDataSetChanged();
}
else {
Toast.makeText(UploadVideoToneActivity.this, response.errorBody().toString(), Toast.LENGTH_LONG).show();
}
}
测试它,如果需要的话
回答:
问题是你所得到的“JSONArray的回应和你想收到在JSONObject
。
您应该使用'List'作为返回类型getMyCollection(callerID.caller_id)
方法。然后执行该方法。
在onResponse
方法,你必须得到像下面
List<MyCollection> data = (List<MyCollection>) response.body()
更新
您可以点击这里查看列表(http://pojo.sodhanalibrary.com/)
把你JSON
响应,然后按提交。您将获得Pojo类结构。
回答:
作出轻微修改尝试从APIResponse<MyCollection>
更改为APIResponse<List<MyCollection>>
因此,代码变为:
public class UploadVideoToneActivity extends BaseActivity{ List<MyCollection> collection = new ArrayList<>();
private void loadCollection() {
ContactItem callerID = SessionManager.getProfile(this);
Call<APIResponse<List<MyCollection>>> call = ServicesFactory.getService().getMyCollection(callerID.caller_id);
call.enqueue(new Callback<APIResponse<List<MyCollection>>>() {
@Override
public void onResponse(Call<APIResponse<List<MyCollection>>> call, Response<APIResponse<List<MyCollection>>> response) {
if (response.isSuccessful() && response.body().isSuccessful()) {
List<MyCollection> data = (List<MyCollection>) response.body().data;
if (data != null) {
collection.clear();
collection.addAll(data);
rvCollection.getAdapter().notifyDataSetChanged();
}
}
else {
Toast.makeText(UploadVideoToneActivity.this, response.errorBody().toString(), Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<APIResponse<List<MyCollection>>> call, Throwable t) {
Toast.makeText(UploadVideoToneActivity.this, t.getLocalizedMessage(), Toast.LENGTH_LONG).show();
}
});
}
而且更新您的Json(部分)至:
"data": [{ "caller_id": "44",
"content_id": "003",
"alias": "Eli Sugigi",
"judul": "Angkat sekarang juga",
"source_content": "http://bla.bla.mp4",
"thumb_pic": "http://bla.bla.mp4",
"sub_start": "2017-12-27 14:17:10",
"sub_end": "2018-01-03 00:00:00"
},
{
"caller_id": "44",
"content_id": "002",
"alias": "Eli Sugigi",
"judul": "Mas Ganteng Angkat Dong",
"source_content": "http://bla.bla.mp4",
"thumb_pic": "http://bla.bla.mp4",
"sub_start": "2017-12-27 15:52:40",
"sub_end": "2018-01-03 00:00:00"
}
]
希望它有帮助!
以上是 java.lang.illegalstateException:预期BEGIN_OBJECT但BEGIN_ARRAY改造 的全部内容, 来源链接: utcz.com/qa/265366.html