我有一个如下的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);
}
答案 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());