2017-07-27 172 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對象作爲響應,但實際上對象數組位於對象內

相關問題