【问题标题】:Expected BEGIN_ARRAY but was BEGIN_OBJECT json应为 BEGIN_ARRAY 但为 BEGIN_OBJECT json
【发布时间】:2017-07-27 16:24:25
【问题描述】:

您好,我正在尝试创建一个从我的 REST API 到我的应用程序的变更日志列表,但我在此错误行中遇到了一些问题:

预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT

JSON 输出:

{
    "forced": "true",
    "version": "1.0A(125)",
    "description": [
        {
            "description": "Fixed some things 1"
        },
        {
            "description": "Fixed some things 2"
        },
        {
            "description": "Fixed some things 3"
        },
        {
            "description": "Fixed some things 4"
        }
    ]
}

我的 REST 调用:

@GET("updatecheck")
Observable<List<UpdateCheckResponse>> UpdateCheckChangeLog();

这是我的 Pojo 类,名为:UpdateCheckResponse.java

public class UpdateCheckResponse {
    @SerializedName("forced")
    @Expose
    private String forced;
    @SerializedName("version")
    @Expose
    private String version;
    @SerializedName("description")
    @Expose
    private List<UpdateCheckDescription> description = null;

    public String getForced() {
        return forced;
    }

    public void setForced(String forced) {
        this.forced = forced;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public List<UpdateCheckDescription> getDescription() {
        return description;
    }

    public void setDescription(List<UpdateCheckDescription> description) {
        this.description = description;
    }
}

我的 POJO 命名为:UpdateCheckDescription.java

public class UpdateCheckDescription {
    @SerializedName("description")
    @Expose
    private String description;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

UpdateChangeLogAdapter.class

public class UpdateChangeLogAdapter extends RecyclerView.Adapter<UpdateChangeLogAdapter.ViewHolder> {

    private ArrayList<UpdateCheckDescription> mAndroidList;

    public UpdateChangeLogAdapter(ArrayList<UpdateCheckDescription> androidList) {
        mAndroidList = androidList;
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_update, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        holder.mTvChangelog.setText(mAndroidList.get(position).getDescription());
    }

    @Override
    public int getItemCount() {
        return mAndroidList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        private TextView mTvChangelog;
        public ViewHolder(View view) {
            super(view);

            mTvChangelog = (TextView)view.findViewById(R.id.descriptionTextView);
        }
    }
}

这是来自我的 UpdateActivity 类的调用:

private void loadJSON() {

    FitnessM8REST apiService =
            FitnessM8RestClient.getClient().create(FitnessM8REST.class);

    mCompositeDisposable.add(apiService.UpdateCheckChangeLog()
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(this::handleResponse,this::handleError));
}

private void handleResponse(List<UpdateCheckResponse> androidList) {

    mAndroidArrayList = new ArrayList<>(androidList);
    mAdapter = new UpdateChangeLogAdapter(mAndroidArrayList);
    mRecyclerView.setAdapter(mAdapter);
}

private void handleError(Throwable error) {
    Toast.makeText(this, "Error "+error.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
    Log.d("Error: ", error.getLocalizedMessage());

}

【问题讨论】:

标签: java android rest retrofit2 rx-java2


【解决方案1】:

看你打错电话了

你的方法应该是

@GET("updatecheck")Call<UpdateCheckResponse> methodName();

在处理响应时,您可以执行类似的操作

List<UpdateCheckDescription> description;
description = response.body().getDescription();

然后在您的适配器中传递该描述集合对象。 您直接调用 List 对象来响应,但实际上对象数组位于对象内部

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 2016-12-27
    • 2013-08-10
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2013-05-15
    相关资源
    最近更新 更多