Reputation: 1105
I have an json output like below.
[{"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"}]
I am getting this using StringRequest in Volley to get the response. Am using Gson library to parse and it was working fine. But suddenly i am getting the below error.
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 3 path $[0]
Am not sure whats went wrong. Gson code used to parseis mentioned below.
Gson gson = new Gson();
ArrayList<descusers> dusers = gson.fromJson(s, new TypeToken<ArrayList<descusers>>() {}.getType());
s is my response. I have cross checked all the values in the descusers and variables are matching. Please help.
Cleaned and Rebuild the project but no use. In error it mentioned as path.$[0] and i am not sure which objects it points.
My POJO class:
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);
}
}
Method used for getting response from server.
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);
}
Upvotes: 1
Views: 2636
Reputation: 1105
The problem is with the POJO class. I have created a new class without extending or implementing any and able to extract the data using the 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());
Upvotes: 1
Reputation: 1414
Instead of Json String request try to do it with Json Array Request that will return you Json Array
Upvotes: 0
Reputation: 169
Problem is not with your model class, issue is with your response you are expecting array to come from api but it is actually coming as object under which you will have array, can you show code to understand more about it ?
Upvotes: 2