2017-03-26 27 views
0

我一直在嘗試發送原始json使用改進2但不工作,我試過JsonObject,地圖,但它根本不工作。我不明白問題是什麼。在郵差工作正常。 我想了這個要求:沒有能力發送原始json的改造

{ 
"incomes":[{"amount":"5566","incomeId":"345"}] 
} 

我的Android代碼:

@Headers({"Accept: application/json"}) 
@POST("/api/v1/addIncome") 
Call<ResponseBody> addIncome(@Body Map<String, String> params); 


Map<String, String> params = new HashMap<>(); 
     Call<ResponseBody> req = null; 
     Income[] incomes = new Income[1]; 
     incomes[0] = income; 
     params.put(URLParam.INCOMES, new Gson().toJson(incomes)); 
     req = CustomUtil.getCuumiAPIObject(this, URLConstant.BASE_URL).addIncome(params); 

我知道添加了relavent一部分,其餘的正常工作與其他服務,問題是parameter.In響應服務器給出了一個空值異常的含義,它們的參數沒有提取值。真的很感謝一些幫助。

回答

0

在發送字符串映射時,您需要發送它與@FieldMap而不是字符串映射爲@Body

使用@FiledMap在你的代碼如下:

@FieldMap Map<String, String> params 

編輯

如果你想與@Body發送您的JSON,你需要用POJO類發送爲@Body通過設置您的值pojo類。

POJO類:

public class Incomes { 

@SerializedName("incomes") 
@Expose 
private List<Income> incomes = null; 

public List<Income> getIncomes() { 
return incomes; 
} 

public void setIncomes(List<Income> incomes) { 
this.incomes = incomes; 
} 


public class Income { 

@SerializedName("amount") 
@Expose 
private String amount; 
@SerializedName("incomeId") 
@Expose 
private String incomeId; 

public String getAmount() { 
return amount; 
} 

public void setAmount(String amount) { 
this.amount = amount; 
} 

public String getIncomeId() { 
return incomeId; 
} 

public void setIncomeId(String incomeId) { 
this.incomeId = incomeId; 
} 

} 
} 

然後,你需要創建Incomes類的對象,並需要設置每incomeIncomes類創建的對象。

Incomes incomes=new Incomes(); 
Incomes.Income mIncome=new Incomes().new Income(); 
mIncome=income; 
incomes.setIncomes(mIncome); 

然後在您API請求發送Incomes類對象爲@Body

req = CustomUtil.getCuumiAPIObject(this, URLConstant.BASE_URL).addIncome(incomes); 

你還需要改變你的addIncome方法如下:

Call<ResponseBody> addIncome(@Body Incomes incomes); 

希望這有助於你。

+0

我想這一點,得到了一個錯誤,從而不得不設置@FormUrlEncoded 並因此得到了錯誤代碼500,因爲像說我需要發送生JSON請求 –

+0

你在'incomes'得到什麼? – pRaNaY

+0

的含義? 我發佈了我需要發送的請求,它的確如此是 –