Reputation: 73
I am trying to parse response from server in Android studio. But I am not getting all values in Arraylist.
I have created ItemData.java and ItemResponse.java
I am Calling Api using getItemData Method:
public void getItemData() {
Call<ItemDataResponse> call = service.getData(token, "200");
call.enqueue(new Callback<ItemDataResponse>() {
@Override
public void onResponse(@NonNull Call<ItemDataResponse> call, @NonNull Response<ItemDataResponse> response) {
Log.d("dataFromServer", response.body.toString());
}
@Override
public void onFailure(@NonNull Call<ItemDataResponse> call, @NonNull Throwable t) {
progressDoalog.dismiss();
Toast.makeText(LiveVehiclesActivity.this, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();
}
});
}
This is Json response:
{
"code":"1",
"items":[
{
"item_id":"200",
"speed":"2"
},
{
"item_id":"201",
"speed":"0"
}
]
}
ItemsResponse.java:
public class ItemDataResponse implements Serializable {
@SerializedName("code")
private String code;
@SerializedName("items")
@Expose
private List<ItemData> items;
public String getResponsecode() {
return responsecode;
}
public void setResponsecode(String responsecode) {
this.responsecode = responsecode;
}
public List<ItemData> getItems() {
return items;
}
public void setItems(List<ItemData> items) {
this.items = items;
}
}
ItemData.java
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class ItemData {
@SerializedName("item_id")
@Expose
private String itemId;
@SerializedName("speed")
@Expose
private String speed;
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public String getSpeed() {
return speed;
}
public void setSpeed(String speed) {
this.speed = speed;
}
}
After run in debug mode I am getting response like:
code:"1"
items=null
Upvotes: 0
Views: 105
Reputation: 127
Use SerializedName attribute for the field contains "_". Here for item_id in your ItemData class getting problem in mapping.
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class ItemData {
@SerializedName("item_id")
@Expose
private String itemId;
@SerializedName("speed")
@Expose
private String speed;
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public String getSpeed() {
return speed;
}
public void setSpeed(String speed) {
this.speed = speed;
}
}
please change your ItemDataResponse class also
public class ItemDataResponse {
@SerializedName("code")
@Expose
private String code;
@SerializedName("items")
@Expose
private List<Item> items = null;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
}
Upvotes: 1
Reputation: 76
The ItemData model does not seem to be consistent with the JSON response. i.e
{
"item_id":"200",
"speed":"2"
}
should map to:
class ItemData implements Serializable {
@SerializedName("item_id")
private String itemId;
@SerializedName("speed")
private String speed;
// getters and setters
}
Upvotes: 1
Reputation: 777
your should modify
class ItemData {
private String item_id;
private String speed;
public String getItem_id() {
return item_id;
}
public void setItem_id(String item_id) {
this.item_id = item_id;
}
public String getSpeed() {
return speed;
}
public void setSpeed(String speed) {
this.speed = speed;
}
}
Upvotes: 1