[英]passing custom object in retrofit2
我試圖通過retrofit2傳遞自定義對象,我的問題是服務器是否自動將我的自定義對象寫入json,或者我是否必須為此編寫一個php文件。 同時我成功發布到服務器但無法寫入json。
我的目標是將自定義對象寫入服務器,並將自定義對象的內容寫入json文件。
這是我的Retrofit Api
public interface ApsaraCatalogAPI {
@GET("/apsaratrendz/data/apsara_json_document_v2.json")
Call<List<ApsaraCatalogModel>> getFeed();
@POST("/apsaratrendz/data/apsara_json_orders_document.json")
Call<Void> setOrder(@Body OrderModel orderModel);
}
這是我的呼叫api功能
@Override
public void onClick(View v) {
int total = 0;
if(v.getId()==R.id.fabButtonCart && cartlist.size()!=0)
{
// get details from shared preferences
OrderModel orderModel = new OrderModel();
orderModel.setDate(getDate());
orderModel.setName("ssdfs");
orderModel.setEmail("sdf@gmail.com");
orderModel.setNoofitems(String.valueOf(cartlist.size()));
orderModel.setOrderno("32335");
orderModel.setPhone("9896566444");
for(int i=0; i<cartlist.size();i++){
Productdetail pd = new Productdetail();
pd.getSellingprice(String.valueOf(cartlist.get(i).getSellingPrice()));
pd.getPid(cartlist.get(i).getEANCode());
total += cartlist.get(i).getSellingPrice();
orderModel.getProductdetails().add(pd);
}
//
// now go for insertion using retrofit
requestData(orderModel);
Toast.makeText(getApplicationContext(), "Total Price : Rs."+total+"/-", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(), "Cart is Empty", Toast.LENGTH_LONG).show();
}
}
這是我對改裝api的服務請求,我正在傳遞新創建的POJO OrderModel類。
private void requestData(OrderModel orderModel) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(ENDPOINT)
.addConverterFactory(GsonConverterFactory.create())
.build();
ApsaraCatalogAPI service = retrofit.create(ApsaraCatalogAPI.class);
Call<Void> call = service.setOrder(orderModel);
call.enqueue(new Callback<Void>() {
@Override
public void onResponse(Call<Void> call, Response<Void> response) {
if(response.isSuccessful()){
Log.d("InApi","Yipppie");
}
}
@Override
public void onFailure(Call<Void> call, Throwable t) {
Log.d("InApi","Kaboom");
}
});
}
我的POJO課程如下:
import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class OrderModel {
private String name;
private String email;
private String phone;
private String orderno;
private String date;
private String noofitems;
private List<Productdetail> productdetails = new ArrayList<Productdetail>();
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
/**
*
* @return
* The name
*/
public String getName() {
return name;
}
/**
*
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}
/**
*
* @return
* The email
*/
public String getEmail() {
return email;
}
/**
*
* @param email
* The email
*/
public void setEmail(String email) {
this.email = email;
}
/**
*
* @return
* The phone
*/
public String getPhone() {
return phone;
}
/**
*
* @param phone
* The phone
*/
public void setPhone(String phone) {
this.phone = phone;
}
/**
*
* @return
* The orderno
*/
public String getOrderno() {
return orderno;
}
/**
*
* @param orderno
* The orderno
*/
public void setOrderno(String orderno) {
this.orderno = orderno;
}
/**
*
* @return
* The date
*/
public String getDate() {
return date;
}
/**
*
* @param date
* The date
*/
public void setDate(String date) {
this.date = date;
}
/**
*
* @return
* The noofitems
*/
public String getNoofitems() {
return noofitems;
}
/**
*
* @param noofitems
* The noofitems
*/
public void setNoofitems(String noofitems) {
this.noofitems = noofitems;
}
/**
*
* @return
* The productdetails
*/
public List<Productdetail> getProductdetails() {
return productdetails;
}
/**
*
* @param productdetails
* The productdetails
*/
public void setProductdetails(List<Productdetail> productdetails) {
this.productdetails = productdetails;
}
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
productdetails類:
import java.util.HashMap;
import java.util.Map;
public class Productdetail {
private String pid;
private String sellingprice;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
/**
*
* @return
* The pid
* @param s
*/
public String getPid(String s) {
return pid;
}
/**
*
* @param pid
* The pid
*/
public void setPid(String pid) {
this.pid = pid;
}
/**
*
* @return
* The sellingprice
* @param s
*/
public String getSellingprice(String s) {
return sellingprice;
}
/**
*
* @param sellingprice
* The sellingprice
*/
public void setSellingprice(String sellingprice) {
this.sellingprice = sellingprice;
}
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
Retrofit根據您的POJO生成json並將其設置在post有效負載上。 所以,在這種情況下:
@POST("/apsaratrendz/data/apsara_json_orders_document.json")
Call<Void> setOrder(@Body OrderModel orderModel);
帖子的主體將是orderModel的json表示。
如果你需要更改json中生成的atributtes的名稱,你可以使用SerializedName Annotation,它非常有用:
public class OrderModel {
@SerializedName("other_name_for_json")
private String name;
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.