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();
}
});
先声明一下,我发帖前搜索过,就是找不到答案。
我想要一个像这样的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
:
@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();
}
});