【发布时间】: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());
}
【问题讨论】:
-
错误信息是不言自明的。您告诉它在响应中期待一个 JSON 数组,但它却收到了一个 JSON 对象。
标签: java android rest retrofit2 rx-java2