2017-07-27 170 views
0

您好我想从我的REST API,以我的应用程序进行更新日志列表,但我有一些问题与此错误路线在这里:预计BEGIN_ARRAY但BEGIN_OBJECT JSON

预计BEGIN_ARRAY但行1列是BEGIN_OBJECT 2路$

的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()); 

} 
+0

错误消息非常明了。你告诉它在响应中期望有一个JSON数组,但它却接收到了一个JSON对象。 –

+0

检查此:https://stackoverflow.com/a/38351872/6021469 –

回答

0

看到你在做一个打错的电话

你的方法应该是

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

和同时处理的响应,你可以这样做

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

,然后通过这样的描述集合对象在适配器。 您正在直接调用List对象作为响应,但实际上对象数组位于对象内

相关问题