Reputation: 63
I am having a very tough time deserializing json in java with gson.
I have the following json:
{"races":[
{"id":1,"mask":1,"side":"alliance","name":"Human"},
{"id":2,"mask":2,"side":"horde","name":"Orc"},
{"id":3,"mask":4,"side":"alliance","name":"Dwarf"}]}
The java code I have now is:
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Gson gson = new Gson();
Type type = new TypeToken<List<WoWDetails>>(){}.getType();
List<WoWRaces> races = gson.fromJson(response, type);
for (WoWRaces race : races){
if(raceID.equals(race.id)) {
raceName = race.name;
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
errorMSG = (TextView) findViewById(R.id. textView5);
errorMSG.setText("That didn't work! URL: \n"+error);
errorMSG.setVisibility(View.VISIBLE);
}
});
In WoWRaces.java is the following code:
WoWRaces.java
public class WoWRaces {
public Integer id;
public String name;
}
It's giving me the following error:
Expected BEGIN_ARRAY but was BEGIN_OBJECT
I have searched and visited multiple questions but I can't seem to figure this out. The data that I would need is the id and the name bound to it.
Thank you in advance
Upvotes: 0
Views: 4592
Reputation: 1978
you can put your json string here and copy all classes in your app and use main class to in the new Gson.fromJson(jsonString,Example.class)
in the url select this option
Upvotes: 1
Reputation: 10126
1. Create RacesResponse
class as:
public class RacesResponse {
@SerializedName("races")
public List<WowRaces> list;
}
2. Change your code to:
RacesResponse racesResponse = gson.fromJson(response, RacesResponse.class);
List<WowRaces> races = racesResponse.list;
Upvotes: 1
Reputation: 244
If you are using gson library then try this
Gson gson = new Gson();
MainResponse mainResponse = gson.fromJson(response, MainResponse.class);
List<Race> races = mainResponse.getRaces();
for (Race race : races) {
Log.e("TEST","Race id : " + race.getId());
Log.e("TEST","Race Name : " + race.getName());
}
MainResponse.java
public class MainResponse {
@SerializedName("races")
@Expose
private List<Race> races = null;
public List<Race> getRaces() {
return races;
}
public void setRaces(List<Race> races) {
this.races = races;
}
}
Race.java
public class Race {
@SerializedName("id")
@Expose
private int id;
@SerializedName("mask")
@Expose
private int mask;
@SerializedName("side")
@Expose
private String side;
@SerializedName("name")
@Expose
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getMask() {
return mask;
}
public void setMask(int mask) {
this.mask = mask;
}
public String getSide() {
return side;
}
public void setSide(String side) {
this.side = side;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Upvotes: 9