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

}