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

回到顶部