Java GSON&;截击=>;应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$
这个错误让我发疯,我尝试使用不同类型的截击请求,例如Java GSON&;截击=>;应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$,java,android,json,gson,android-volley,Java,Android,Json,Gson,Android Volley,这个错误让我发疯,我尝试使用不同类型的截击请求,例如JsonArrayRequest和JsonObjectRequest,但没有成功 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$ 下面是JSON响应链接=> 这是我的模型课 public class Order { @SerializedName("status") @Expose
JsonArrayRequest
和JsonObjectRequest
,但没有成功
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$
下面是JSON响应链接=>
这是我的模型课
public class Order {
@SerializedName("status")
@Expose
private String status; //status
@SerializedName("total")
@Expose
private float price; //total
@SerializedName("created_at")
@Expose
private Date time;
@SerializedName("line_items")
@Expose
public List<ItemsNum> lineItems = new ArrayList<ItemsNum>();
@SerializedName("sub_orders")
@Expose
public List<OrdersNum> subOrders = new ArrayList<OrdersNum>();
@SerializedName("shipping_address")
@Expose
public CusAddress cusAdress;
@SerializedName("customer")
@Expose
public Customer customer;
public Order(Customer customer, String status, float price, String cusPicURL, String firstName, String lastName, Date time, List<ItemsNum> lineItems, List<OrdersNum> subOrders, CusAddress cusAdress) {
this.status = status;
this.price = price;
this.customer = customer;
this.time = time;
this.lineItems = lineItems;
this.subOrders = subOrders;
this.cusAdress = cusAdress;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public List<ItemsNum> getLineItems() {
return lineItems;
}
public void setLineItems(List<ItemsNum> lineItems) {
this.lineItems = lineItems;
}
public List<OrdersNum> getSubOrders() {
return subOrders;
}
public void setSubOrders(List<OrdersNum> subOrders) {
this.subOrders = subOrders;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public CusAddress getCusAdress() {
return cusAdress;
}
public void setCusAdress(CusAddress cusAdress) {
this.cusAdress = cusAdress;
}
// //////////// Inner-Classes
public class Customer {
@SerializedName("avatar_url")
@Expose
private String cusPicURL; //avatar_url
@SerializedName("first_name")
@Expose
private String firstName; //first_name
@SerializedName("last_name")
@Expose
private String lastName; //last_name
public String getCusPicURL() {
return cusPicURL;
}
public void setCusPicURL(String cusPicURL) {
this.cusPicURL = cusPicURL;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
public class CusAddress {
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@SerializedName("address_1")
@Expose
public String address;
@SerializedName("city")
@Expose
public String city;
@SerializedName("state")
@Expose
public String state;
@SerializedName("country")
@Expose
public String country;
}
public class ItemsNum {
@SerializedName("id")
@Expose
public Integer id;
}
public class OrdersNum {
@SerializedName("id")
@Expose
public Integer id;
}
}
公共类秩序{
@序列化名称(“状态”)
@暴露
私有字符串状态;//状态
@序列化名称(“总计”)
@暴露
私人浮动价格;//总计
@SerializedName(“创建于”)
@暴露
私人约会时间;
@SerializedName(“行项目”)
@暴露
public List lineItems=new ArrayList();
@序列化名称(“子订单”)
@暴露
public List subOrders=new ArrayList();
@序列化名称(“装运地址”)
@暴露
公共广播;
@序列化名称(“客户”)
@暴露
公众客户;
公共订单(客户、字符串状态、浮动价格、字符串cusPicURL、字符串firstName、字符串lastName、日期时间、列表行项目、列表子订单、CusAddress CusAddress){
这个状态=状态;
这个价格=价格;
this.customer=customer;
这个时间=时间;
this.lineItems=行项目;
this.subOrders=子订单;
this.cusaddress=cusaddress;
}
公共日期getTime(){
返回时间;
}
公共无效设置时间(日期时间){
这个时间=时间;
}
公共列表getLineItems(){
返回行项目;
}
公共无效集合行项目(列出行项目){
this.lineItems=行项目;
}
公共列表getSubOrders(){
返回子订单;
}
公共作废集合子订单(列出子订单){
this.subOrders=子订单;
}
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公开发行价格(){
退货价格;
}
公共定价(浮动价格){
这个价格=价格;
}
公共地址GetCusAddress(){
返回原点;
}
公共无效设置地址(CusAddress CusAddress){
this.cusaddress=cusaddress;
}
////内部类
公共类客户{
@序列化名称(“化身url”)
@暴露
私有字符串cusPicURL;//avatar\u url
@SerializedName(“名字”)
@暴露
私有字符串firstName;//first\u name
@SerializedName(“姓氏”)
@暴露
私有字符串lastName;//last\u name
公共字符串getCusPicURL(){
返回cusPicURL;
}
公共void setCusPicURL(字符串cusPicURL){
this.cusPicURL=cusPicURL;
}
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
}
公共类地址{
公共字符串getAddress(){
回信地址;
}
公共无效设置地址(字符串地址){
this.address=地址;
}
公共字符串getCity(){
回归城市;
}
公共城市(字符串城市){
this.city=城市;
}
公共字符串getState(){
返回状态;
}
公共无效设置状态(字符串状态){
this.state=状态;
}
公共字符串getCountry(){
返回国;
}
公共国家/地区(字符串国家/地区){
这个国家=国家;
}
@序列化名称(“地址1”)
@暴露
公共字符串地址;
@序列化名称(“城市”)
@暴露
公共字符串城市;
@序列化名称(“状态”)
@暴露
公共字符串状态;
@序列化名称(“国家”)
@暴露
公共字符串国家;
}
公共类项目{
@序列化名称(“id”)
@暴露
公共整数id;
}
公共类命令{
@序列化名称(“id”)
@暴露
公共整数id;
}
}
我的适配器
public class OrdersDataAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public Context context;
private int num;
ArrayList<Order> orders;
public OrdersDataAdapter(ArrayList<Order> orders, Context context) {
this.orders = orders;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.order_card, parent, false);
return new NewOrderVH(v);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
final Order order = this.orders.get(position);
final NewOrderVH vh1 = (NewOrderVH) holder;
vh1.setData(orders.get(position));
}
@Override
public int getItemCount() {
return orders.size();
}
public class NewOrderVH extends RecyclerView.ViewHolder {
private ImageView cusPic;
private TextView cusName;
private TextView CusAdress;
private TextView vendorsNum;
private TextView itemsNum;
private TextView time;
public NewOrderVH(View itemView) {
super(itemView);
orderCard = (CardView) itemView.findViewById(R.id.OrderCard);
cusPic = (ImageView) itemView.findViewById(R.id.cusPic);
cusName = (TextView) itemView.findViewById(R.id.cusName);
CusAdress = (TextView) itemView.findViewById(R.id.CusAdress);
vendorsNum = (TextView) itemView.findViewById(R.id.vendorsNum);
itemsNum = (TextView) itemView.findViewById(R.id.itemsNum);
time = (TextView) itemView.findViewById(R.id.time);
}
public void setData(final Order data) {
cusName.setText(data.customer.getFirstName() + "" + data.customer.getLastName());
Picasso.with(context).load(data.customer.getCusPicURL()).into(cusPic);
time.setText(data.getTime().getMinutes());
vendorsNum.setText(data.getSubOrders().size());
itemsNum.setText(data.getLineItems().size());
CusAdress.setText(data.cusAdress.getAddress() + "" + data.cusAdress.getCity() + "" + data.cusAdress.getCountry() + "" + data.cusAdress.getState());
}
}
private void fetchPosts() {
requestQueue = Volley.newRequestQueue(getActivity());
StringRequest jRequest = new StringRequest(Request.Method.GET, ENDPOINT, onPostsLoaded, onPostsError);
requestQueue.add(jRequest);
}
private final Response.Listener<String> onPostsLoaded = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Gson gson = new Gson();
Type listType = new TypeToken<List<Order>>() {}.getType();
modelData = gson.fromJson(response, listType);
adapter = new OrdersDataAdapter((ArrayList<Order>) modelData, getActivity());
recyclerView.setAdapter(adapter);
adapter.setMode(Attributes.Mode.Single);
}
};
private final Response.ErrorListener onPostsError = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("PostActivity", error.toString());
}
};
公共类OrdersDataAdapter扩展了RecyclerView.Adapter{
公共语境;
私有整数;
ArrayList命令;
public OrdersDataAdapter(ArrayList orders,上下文){
这个。订单=订单;
this.context=上下文;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.order_card,parent,false);
返回新的NewOrderVH(v);
}
@凌驾
公共无效onBindViewHolder(最终RecyclerView.ViewHolder,最终整型位置){
最终订单=此.orders.get(位置);
最终新订单VH vh1=(新订单VH)持有人;
vh1.setData(orders.get(position));
}
@凌驾
public int getItemCount(){
退货订单。大小();
}
公共类NewOrderVH扩展了RecyclerView.ViewHolder{
私有ImageView cusPic;
私有文本视图名称;
私有文本视图库地址;
私有文本视图vendorsNum;
私有文本视图项;
私有文本查看时间;
public NewOrderVH(查看项目视图){
超级(项目视图);
orderCard=(CardView)itemView.findViewById(R.id.orderCard);
cusPic=(ImageView)itemView.findViewById(R.id.cusPic);
cusName=(TextView)itemView.findViewById(R.id.cusName);
cusaddress=(TextView)itemView.findViewById(R.id.cusaddress);
vendorsNum=(TextView)itemView.findViewById(R.id.vendorsNum);
itemsNum=(TextView)itemView.findViewById(R.id.itemsNum);
time=(TextView)itemView.findViewById(R.id.time);
}
公共无效设置数据(最终订单数据){
cusName.setText(data.customer.getFirstName()+“”+data.customer.getLastName());
Picasso.with(context).load(data.customer.getCusPicURL()).into(cusPic);
time.setText(data.getTime().getMinutes());
vendorsNum.setText(data.getSubOrders().size());
itemsum.setText(data.getLineItems().size());
cusaddress.setText(data.cusaddress.getAddress()+“”+data.cusaddress.getCi
public class OrderHolder{
private List<Order> orders;
public List<Order> getOrders(){ return orders; }
}
OrderHolder holder = new Gson().fromJson(response, OrderHolder.class);
modelData = holder.getOrders();
JsonElement jelement = new JsonParser().parse(response);
JsonObject jobject = jelement.getAsJsonObject();
String ordersString = jobject.get("orders").getAsString();
Gson gson = new Gson();
Type listType = new TypeToken<List<Order>>() {}.getType();
modelData = gson.fromJson(ordersString, listType);
JsonObjectRequest jsObjRequest = new
JsonObjectRequest(Request.Method.GET,ENDPOINT,null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Gson gson = new Gson();
Type listType = new TypeToken<List<Order>>() {}.getType();
try {
List<Order> o = new ArrayList<>();
o = gson.fromJson(response.getJSONArray("orders").toString(), listType);
if(o != null && !o.isEmpty()){
modelData.addAll(o);
adapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(jsObjRequest);
}