Android Gson 改造预计 BEGIN_OBJECT 但为 NUMBER

Android Gson Retrofit Expected BEGIN_OBJECT but was NUMBER

先声明一下,我发帖前搜索过,就是找不到答案。

我想要一个像这样的api

[ 1、 2、 3、 4、 5、 6、 7 ]

然后添加 RecylerView .

型号 Seats.java

////////////////////////////////////////// /// //////////////////////////////
导入 com.google.gson.annotations.SerializedName;

public class Seats {

    @SerializedName("seatNo")
    private int seatNo;




    public int getSeatNo() {
        return seatNo;
    }

    public void setSeatNo(int seatNo) {
        this.seatNo = seatNo;
    }

    @Override
    public String toString() {
        
        return
                "seats{" +
                        "unique_id = '" + seatNo + '\'' +
                      
                        "}";
    }
}

座位适配器

public class SeatsAdapter extends RecyclerView.Adapter<SeatsAdapter.SeatsViewHolder> {


    private SeatsActivity seatsActivity;
    private Context context;
    private ArrayList<Seats> seatsList;
    //Context ctx;

    public SeatsAdapter(SeatsActivity seatsActivity, Context context, ArrayList<Seats> seatsList) {
        this.seatsList = seatsList;
        this.seatsActivity = seatsActivity;
        this.context = context;
        //this.ctx = ctx;
    }


    @Override
    public SeatsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout
                .item_seat, parent, false);

        return new SeatsViewHolder(view);
    }


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

        final Seats seats = seatsList.get(position);
        holder.mTvSeatNo.setText(seats.getSeatNo());
    
    }

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

        protected class SeatsViewHolder extends RecyclerView.ViewHolder {

        private final ImageView mIvSeatSelected;
        private ImageView mIvSeat, mTvSeatLadies, mIvSeatBooked;
        private TextView mTvSeatNo;

        public SeatsViewHolder(View itemView) {
            super(itemView);

            mIvSeat = itemView.findViewById(R.id.ivSeat);
            mIvSeatSelected = itemView.findViewById(R.id.ivSeatSelected);
            mTvSeatNo = itemView.findViewById(R.id.tvSeatNo);
            mTvSeatLadies = itemView.findViewById(R.id.ivSeatLadies);
            mIvSeatBooked = itemView.findViewById(R.id.ivSeatBooked);


        }

    }
}

这里是activity.java

  private void initParcelRcv() {
        seatsList = new ArrayList<Seats>();
        rcvSeat= (RecyclerView) findViewById(R.id.rcvSeat);
        rcvSeat.setLayoutManager(new LinearLayoutManager(this));
        SeatsAdapter = new SeatsAdapter(this,this,seatsList);
        rcvSeat.setAdapter(SeatsAdapter);
    }

   private void getSeatsInfo() {


        Utils.showCustomProgressDialog(this, getResources().getString(R.string
                        .msg_waiting_for_get_documents),
                false, null);



        Call<List<Seats>> call =  ApiClient.getClient().create(ApiInterface.class)
                .getSeats(busName,departure,arrival,departuretime);

        call.enqueue(new Callback<List<Seats>>() {
            @Override
            public void onResponse(Call<List<Seats>> call, Response<List<Seats>> response) {

                if (parseContent.isSuccessful(response)) {

                    List<Seats> seats = response.body();
                   seatsList.addAll(Arrays.asList(seats.toArray()));

                    SeatsAdapter.notifyDataSetChanged();
                    Utils.hideCustomProgressDialog();
                }
                else {
                    Utils.showErrorToast(response.body().hashCode(),
                            SeatsActivity.this);
                    Utils.hideCustomProgressDialog();
                }


            }

            @Override
            public void onFailure(Call<List<Seats>> call, Throwable t) {
                AppLog.handleThrowable(SeatsActivity.class.getSimpleName(), t);
                Utils.showToast(SeatsActivity.class.getSimpleName(), SeatsActivity.this
                );
                Utils.hideCustomProgressDialog();

            }
        });
    }

您的代码需要“{”,但却找到了一个数字。你应该先检查你的JSON(请在你的问题中写一个结果JSON,我认为它是[ 1, 2, 3, 4, 5, 6, 7 ])。

我看到你在 Seats.java:

中使用这个 POJO
@SerializedName("seatNo")
private int seatNo;

这是一个错误的模型,因为您的 JSON 包含一个整数列表。

也许你应该删除 Seats.java 并重写回调:

call.enqueue(new Callback<List<Integer>>() {

更新

只需将Seats替换为Integer(我没检查)。

Call<List<Integer>> call =  ApiClient.getClient().create(ApiInterface.class)
                .getSeats(busName,departure,arrival,departuretime);

        call.enqueue(new Callback<List<Integer>>() {
            @Override
            public void onResponse(Call<List<Integer>> call, Response<List<Integer>> response) {

                if (parseContent.isSuccessful(response)) {

                    List<Integer> seats = response.body();
                    seatsList.addAll(Arrays.asList(seats.toArray()));

                    SeatsAdapter.notifyDataSetChanged();
                    Utils.hideCustomProgressDialog();
                }
                else {
                    Utils.showErrorToast(response.body().hashCode(),
                            SeatsActivity.this);
                    Utils.hideCustomProgressDialog();
                }
            }

            @Override
            public void onFailure(Call<List<Integer>> call, Throwable t) {
                AppLog.handleThrowable(SeatsActivity.class.getSimpleName(), t);
                Utils.showToast(SeatsActivity.class.getSimpleName(), SeatsActivity.this
                );
                Utils.hideCustomProgressDialog();

            }
        });