Reputation: 2206
I have tested this in my backend PHP API. The data that will be passed like this:
{
"driver": "Dzil",
"vehicle_number": "Jalal",
"date_unique_number": "2019-09-09",
"unique_number": "ABCDEF",
"rest_product_weighing_details": [400,401]
}
As you can see, the rest_product_weighing_detail
is an array.
How to make retrofit will be handle this in post ?
Any advice it so appreciated
Upvotes: 0
Views: 923
Reputation: 234
create a class and assign value to it,
public class Example {
@SerializedName("driver")
@Expose
private String driver;
@SerializedName("vehicle_number")
@Expose
private String vehicleNumber;
@SerializedName("date_unique_number")
@Expose
private String dateUniqueNumber;
@SerializedName("unique_number")
@Expose
private String uniqueNumber;
@SerializedName("rest_product_weighing_details")
@Expose
private List<Integer> restProductWeighingDetails = null;
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getVehicleNumber() {
return vehicleNumber;
}
public void setVehicleNumber(String vehicleNumber) {
this.vehicleNumber = vehicleNumber;
}
public String getDateUniqueNumber() {
return dateUniqueNumber;
}
public void setDateUniqueNumber(String dateUniqueNumber) {
this.dateUniqueNumber = dateUniqueNumber;
}
public String getUniqueNumber() {
return uniqueNumber;
}
public void setUniqueNumber(String uniqueNumber) {
this.uniqueNumber = uniqueNumber;
}
public List<Integer> getRestProductWeighingDetails() {
return restProductWeighingDetails;
}
public void setRestProductWeighingDetails(List<Integer> restProductWeighingDetails) {
this.restProductWeighingDetails = restProductWeighingDetails;
}
}
you can generate json pojo class using http://www.jsonschema2pojo.org/
Upvotes: 0
Reputation: 1660
Step 1:
In your Decode class :
public class Decode {
private List<Integer> values = new ArrayList<>(); // in json it is "rest_product_weighing_details"
public List<Integer> getValues() {
return values;
}
public void setValues(List<Integer> values) {
this.values = values;
}
}
Step 2:
create following JsonDeserializer
:
public class MyDeserializer implements JsonDeserializer<Decode> {
@Override
public Decode deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
JsonObject decodeObj = arg0.getAsJsonObject();
Gson gson = new Gson();
Decode decode = gson.fromJson(arg0, Decode.class);
List<Integer> values = null;
if (decodeObj.get("rest_product_weighing_details").isJsonArray()) {
values = gson.fromJson(decodeObj.get("rest_product_weighing_details"), new TypeToken<List<Integer>>() {
}.getType());
} else {
Integer single = gson.fromJson(decodeObj.get("rest_product_weighing_details"), Integer.class);
values = new ArrayList<Integer>();
values.add(single);
}
decode.setValues(values);
return decode;
}
}
Upvotes: 1
Reputation: 6277
Create an object an set your data.
public class BodyModel {
@SerializedName("driver")
@Expose
private String driver;
@SerializedName("vehicle_number")
@Expose
private String vehicleNumber;
@SerializedName("date_unique_number")
@Expose
private String dateUniqueNumber;
@SerializedName("unique_number")
@Expose
private String uniqueNumber;
@SerializedName("rest_product_weighing_details")
@Expose
private List<Integer> restProductWeighingDetails = null;
//...
}
Pass the object as body in your api call
@Headers({"Content-Type: application/json"})
@POST("your/api/endpoint")
Call<ResponseBody> sendDrivingData(@Body BodyModel body);
Upvotes: 1
Reputation: 438
I think just this handle it for you :
private List<Integer> rest_product_weighing_details;
and also this link may help you: Android retrofit parse nested json response in List
Upvotes: 1