2017-03-26 6 views
0

retrofit 2を使用してraw jsonを送信しようとしましたが、動作していません。JsonObjectを試しました。マップは動作しません。私は問題が何であるか理解していない。郵便配達員でうまく動作します。 私はこの要求を送信しようとしています:raw jsonをレトロフィットで送信できません

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

は私のアンドロイドのコードは次のとおりです。

@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応答サーバである知っていますnull値の例外の意味を与えます。パラメータは値を取り上げません。本当に助けに感謝します。

答えて

0

文字列マップを送信するときに、@Bodyという文字列マップではなく、@FieldMapで送信する必要があります。

次のようにあなたのコード内

使用@FiledMap

@FieldMap Map<String, String> params 

編集

あなたが@BodyとあなたのJSONを送信する場合は、@BodyとしてPOJOクラスで送信する必要があり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クラスのオブジェクトを作成し、Incomesクラスの作成されたオブジェクト内のすべてのincomeを設定する必要がありますする必要があります。

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

その後APIリクエストに@BodyとしてIncomesクラスオブジェクトを送信します。

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

また、以下のようにあなたのaddIncome方法を変更する必要があります。

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

希望これはあなたを助けます。

+0

エラーが発生しましたので、@FormUrlEncodedを に設定し、結果としてエラーコード500が返されました。私は未処理のjsonリクエストを送信する必要があります。 –

+0

「収入」には何が入っていますか? – pRaNaY

+0

? 私は送信する必要があるという要求を投稿しました。それはまさにそれです。 –

関連する問題