com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第3列路径$ [0]中为BEGIN_OBJECT

时间:2018-11-20 08:07:27

标签: android gson

我有一个如下的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"}]

我在Volley中使用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 gson = new Gson();
ArrayList<descusers> dusers = gson.fromJson(s, new TypeToken<ArrayList<descusers>>() {}.getType());

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

已清理并重建项目,但无用。错误地提到它是path。$ [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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

尝试使用将返回您的Json Array的Json Array Request代替Json String请求

答案 2 :(得分:0)

问题出在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());