代码之家  ›  专栏  ›  技术社区  ›  user2269164

com.google.gson.jsonsyntaxception:java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第3列path$[0]处为BEGIN_对象

  •  0
  • user2269164  · 技术社区  · 6 年前

    我有一个json输出,如下所示。

    [{"FoodName":"fish","image":"http:\/\/ckckc.com\/images\/60.png","loginname":"sss","time":"1525706184851","userid":"1","profile":"http:\/\/ckckc.com\/profile\/0.png","cuisine":"pomfret fry","wherefrom":"fish shop","locality":"xxx block ","random":"0869155d","id":"61","city":"","like":"0","follow":"profile"}]
    

    我是在截击中使用StringRequest来获取响应的。我使用Gson库进行解析,它运行良好。但突然间我发现了下面的错误。

    com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 3 path $[0]
    

    Gson gson = new Gson();
    ArrayList<descusers> dusers = gson.fromJson(s, new TypeToken<ArrayList<descusers>>() {}.getType());
    

    s是我的回应。我交叉检查了descusers中的所有值,并且变量都匹配。请帮忙。

    已清理并重建项目,但没有使用。错误地,它提到了路径。$[0],我不确定它指向哪个对象。

    我的POJO课程:

     class descusers extends ArrayList<Parcelable> implements Parcelable {
    String descCrip;
    String loginname;
    String image;
    long Ptime;
    String profile;
    String Image;
    String cuisine;
    String where;
    String locality;
    int id;
    String random;
    String comment;
    String reply;
    double latitude,longitude;
    int like;
    int likecount;
    int sharecount;
    int commentid;
    int commentcount;
    int replycount;
    int commentrepliesid;
    int userid;
    String city;
    String username;
    int present;
    String followcheckinlists;
    
    long timeofaction;
    int idofpost;
    String actionuserprofile;
    int actionuserid;
    String actionusername;
    String usernameofpost;
    String action;
    String postimage;
    String follow;
    String FoodName;
    String wherefrom;
    long time;
    int useridofpost;
    
    public long getTime() {
        return time;
    }
    
    public void setTime(long time) {
        this.time = time;
    }
    
    public void setReplycount(int replycount) {
        this.replycount = replycount;
    }
    
    public String getFoodName() {
        return FoodName;
    }
    
    public void setFoodName(String foodName) {
        FoodName = foodName;
    }
    
    protected descusers(Parcel in) {
        descCrip = in.readString();
        loginname = in.readString();
        image = in.readString();
        Ptime = in.readLong();
        profile = in.readString();
        Image = in.readString();
        cuisine = in.readString();
        where = in.readString();
        locality = in.readString();
        id = in.readInt();
        random = in.readString();
        comment = in.readString();
        reply = in.readString();
        city = in.readString();
        latitude = in.readDouble();
        longitude = in.readDouble();
        like = in.readInt();
        likecount = in.readInt();
        sharecount = in.readInt();
        commentid = in.readInt();
        commentcount = in.readInt();
        replycount = in.readInt();
        commentrepliesid = in.readInt();
        userid = in.readInt();
        username = in.readString();
        present = in.readInt();
        followcheckinlists = in.readString();
        timeofaction = in.readLong();
        idofpost = in.readInt();
        actionuserprofile = in.readString();
        actionuserid = in.readInt();
        actionusername = in.readString();
        usernameofpost = in.readString();
        action = in.readString();
        postimage = in.readString();
        follow = in.readString();
        FoodName = in.readString();
        wherefrom = in.readString();
        time = in.readLong();
        useridofpost = in.readInt();
    
    
    }
    
    public static final Creator<descusers> CREATOR = new Creator<descusers>() {
        @Override
        public descusers createFromParcel(Parcel in) {
            return new descusers(in);
        }
    
        @Override
        public descusers[] newArray(int size) {
            return new descusers[size];
        }
    };
    
    public int getUserid() {
        return userid;
    }
    
    public void setUserid(int userid) {
        this.userid = userid;
    }
    
    public void setPtime(long ptime) {
        Ptime = ptime;
    }
    
    
    
    public void setProfile(String profile) {
        this.profile = profile;
    }
    
    
    public String getProfile() {
        return profile;
    }
    
    
    
    
    public int getCommentrepliesid() {
        return commentrepliesid;
    }
    
    public descusers() {
    
    }
    
    public String getRandom() {
        return random;
    }
    
    public void setRandom(String random) {
        this.random = random;
    }
    
    public String getLoginname() {
    
        return loginname;
    }
    
    public String getComment() {
        return comment;
    }
    
    
    public String getDescCrip() {
        return descCrip;
    }
    
    public void setDescCrip(String descCrip) {
        this.descCrip = descCrip;
    }
    
    public int getCommentid() {
        return commentid;
    }
    
    public void setCommentcount(int commentcount) {
        this.commentcount = commentcount;
    }
    
    public int getCommentcount() {
        return commentcount;
    }
    
    public void setSharecount(int sharecount) {
        this.sharecount = sharecount;
    }
    
    public void setCity(String city) {
        this.city = city;
    }
    
    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }
    
    public String getCity() {
        return city;
    }
    
    public double getLatitude() {
        return latitude;
    }
    
    public double getLongitude() {
        return longitude;
    }
    
    public void setLongitude(double longitude) {
    
        this.longitude = longitude;
    }
    
    public String getReply() {
        return reply;
    }
    
    public String getName(){
        return loginname;
    }
    
    public String getCuisine() {
        return cuisine;
    }
    
    public String getWhere() {
        return where;
    }
    
    public void setLoginname(String loginname) {
        this.loginname = loginname;
    }
    
    public String getLocality() {
        return locality;
    }
    
    public String getimage() {
        return image;
    }
    
    public void setimage(String image) {
        this.image = image;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public int getLikecount() {
        return likecount;
    }
    
    public int getId() {
    
        return id;
    
    }
    
    public void setLikecount(int likecount) {
        this.likecount = likecount;
    }
    
    public void setLike(int like) {
        this.like = like;
    
    }
    
    public void setCuisine(String cuisine) {
        this.cuisine = cuisine;
    }
    
    public void setWhere(String where) {
        this.where = where;
    }
    
    public void setLocality(String locality) {
        this.locality = locality;
    }
    
    public int getLike() { return like; }
    
    public String getUsername() {
        return username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    
    
    
    
    public long getPtime() {
        return Ptime;
    }
    
    @Override
    public int describeContents() {
        return 0;
    }
    
    public int getPresent() {
        return present;
    }
    
    public void setPresent(int present) {
        this.present = present;
    }
    
    public String getFollowcheckinlists() {
        return followcheckinlists;
    }
    
    public long getTimeofaction() {
        return timeofaction;
    }
    
    public String getAction() {
        return action;
    }
    
    public void setAction(String action) {
        this.action = action;
    }
    
    public void setTimeofaction(long timeofaction) {
        this.timeofaction = timeofaction;
    }
    
    public int getIdofpost() {
        return idofpost;
    }
    
    public void setIdofpost(int idofpost) {
        this.idofpost = idofpost;
    }
    
    public String getActionuserprofile() {
        return actionuserprofile;
    }
    
    public void setActionuserprofile(String actionuserprofile) {
        this.actionuserprofile = actionuserprofile;
    }
    
    public int getActionuserid() {
        return actionuserid;
    }
    
    public void setActionuserid(int actionuserid) {
        this.actionuserid = actionuserid;
    }
    
    public String getActionusername() {
        return actionusername;
    }
    
    public void setActionusername(String actionusername) {
        this.actionusername = actionusername;
    }
    
    public String getUsernameofpost() {
        return usernameofpost;
    }
    
    public void setUsernameofpost(String usernameofpost) {
        this.usernameofpost = usernameofpost;
    }
    
    public String getPostimage() {
        return postimage;
    }
    
    public void setPostimage(String postimage) {
        this.postimage = postimage;
    }
    
    public void setFollowcheckinlists(String followcheckinlists) {
        this.followcheckinlists = followcheckinlists;
    }
    
    public String getFollow() {
        return follow;
    }
    
    public void setFollow(String follow) {
        this.follow = follow;
    }
    
    
    
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(descCrip);
        dest.writeString(loginname);
        dest.writeString(image);
        dest.writeLong(Ptime);
        dest.writeString(profile);
        dest.writeString(Image);
        dest.writeString(cuisine);
        dest.writeString(where);
        dest.writeString(locality);
        dest.writeInt(id);
        dest.writeString(random);
    
        dest.writeString(comment);
        dest.writeString(reply);
        dest.writeString(city);
        dest.writeDouble(latitude);
        dest.writeDouble(longitude);
        dest.writeInt(like);
    
        dest.writeInt(likecount);
        dest.writeInt(sharecount);
        dest.writeInt(commentid);
        dest.writeInt(commentcount);
        dest.writeInt(replycount);
        dest.writeInt(commentrepliesid);
        dest.writeInt(userid);
        dest.writeString(username);
    
        dest.writeInt(present);
        dest.writeString(followcheckinlists);
    
        dest.writeLong(timeofaction);
        dest.writeInt(idofpost);
        dest.writeString(actionuserprofile);
        dest.writeInt(actionuserid);
        dest.writeString(actionusername);
        dest.writeString(usernameofpost);
        dest.writeString(action);
        dest.writeString(postimage);
        dest.writeString(follow);
        dest.writeString(FoodName);
        dest.writeString(wherefrom);
        dest.writeLong(time);
        dest.writeInt(useridofpost);
    
       }
    
       }
    

    用于从服务器获取响应的方法。

        private void listdisp(String query, String locationname, String uname, int id) {
        m.mShimmerViewContainer.startShimmer();
        m.mShimmerViewContainer.setVisibility(View.VISIBLE);
    
        StringRequest stringRequest = new StringRequest(Request.Method.POST, BuildConfig.LD,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        if (s != null && !s.isEmpty() && !s.equals("no results"))
                        {
                            Gson gson = new Gson();
                            m.dusers = gson.fromJson(s, new TypeToken<ArrayList<descusers>>() {}.getType());
                            FragmentActivity c = getActivity();
                            m.fpa = new followpostAdapter(c, m.dusers,m.user,m.s);
                            m.lists.setAdapter(m.fpa);
                            m.lists.setVisibility(View.VISIBLE);
                           // m.lists.setTextFilterEnabled(false);
                           // m.lists.setEmptyView(m.emptyElement);
                            m.mShimmerViewContainer.stopShimmer();
                            m.mShimmerViewContainer.setVisibility(View.GONE);
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getActivity(), error.getMessage(), Toast.LENGTH_LONG).show();
                    }
                }) {
    
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new Hashtable<String, String>();
                params.put("deskey", query);
                params.put("uname",uname);
                params.put("locationame",locationname);
                params.put("userid",String.valueOf(id));
                return params;
            }
        };
        int socketTimeout = 60000;
        RetryPolicy policy = new DefaultRetryPolicy(socketTimeout,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
        RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
        stringRequest.setRetryPolicy(policy);
        requestQueue.add(stringRequest);
    
        }
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Taha wakeel    6 年前

    问题不在于您的模型类,而在于您的响应,您希望数组来自api,但它实际上是作为一个对象来的,在这个对象下您将拥有数组,您可以显示代码来了解更多关于它的信息吗?

        2
  •  1
  •   user2269164    6 年前

    问题在于POJO类。我创建了一个新类,没有扩展或实现任何类,并且能够使用Gson提取数据。

     public class d {
    
     String FoodName;
     String image;
     String cuisine;
     String wherefrom;
    String locality;
    int id;
    int userid;
    int likecount;
    int sharecount;
    String loginname;
    String random;
    int commentcount;
    String city;
    double latitude;
    double longitude;
    String profile;
    long time;
    int like;
    String follow;
    
    public String getFoodName() {
        return FoodName;
    }
    
    public void setFoodName(String foodName) {
        FoodName = foodName;
    }
    
    public String getImage() {
        return image;
    }
    
    public void setImage(String image) {
        this.image = image;
    }
    
    public String getCuisine() {
        return cuisine;
    }
    
    public void setCuisine(String cuisine) {
        this.cuisine = cuisine;
    }
    
    public String getWherefrom() {
        return wherefrom;
    }
    
    public void setWherefrom(String wherefrom) {
        this.wherefrom = wherefrom;
    }
    
    public String getLocality() {
        return locality;
    }
    
    public void setLocality(String locality) {
        this.locality = locality;
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public int getUserid() {
        return userid;
    }
    
    public void setUserid(int userid) {
        this.userid = userid;
    }
    
    public int getLikecount() {
        return likecount;
    }
    
    public void setLikecount(int likecount) {
        this.likecount = likecount;
    }
    
    public int getSharecount() {
        return sharecount;
    }
    
    public void setSharecount(int sharecount) {
        this.sharecount = sharecount;
    }
    
    public String getLoginname() {
        return loginname;
    }
    
    public void setLoginname(String loginname) {
        this.loginname = loginname;
    }
    
    public String getRandom() {
        return random;
    }
    
    public void setRandom(String random) {
        this.random = random;
    }
    
    public int getCommentcount() {
        return commentcount;
    }
    
    public void setCommentcount(int commentcount) {
        this.commentcount = commentcount;
    }
    
    public String getCity() {
        return city;
    }
    
    public void setCity(String city) {
        this.city = city;
    }
    
    public double getLatitude() {
        return latitude;
    }
    
    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }
    
    public double getLongitude() {
        return longitude;
    }
    
    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }
    
    public String getProfile() {
        return profile;
    }
    
    public void setProfile(String profile) {
        this.profile = profile;
    }
    
    public long getTime() {
        return time;
    }
    
    public void setTime(long time) {
        this.time = time;
    }
    
    public int getLike() {
        return like;
    }
    
    public void setLike(int like) {
        this.like = like;
    }
    
    public String getFollow() {
        return follow;
    }
    
    public void setFollow(String follow) {
        this.follow = follow;
    }
     }
    
    
    
     Gson gson = new Gson();
     ArrayList<d>  da= gson.fromJson(s, new TypeToken<ArrayList<d>>() {}.getType());
    
        3
  •  0
  •   Rohit Sharma    6 年前

    不要使用Json字符串请求,而是尝试使用Json数组请求,该请求将返回Json数组