[英]how to post with multiple value in a key with retrofit2
i create an API on server side, when i tried to post with POSTMAN
like this.. 当我尝试用
POSTMAN
发布时,我在服务器端创建了一个API。
tokenku:2040asdfasdfasdfCBLCPTDPaS99P7L0N9LYP8X4sdfasdf
userdetail:2
invoiceNo:(AUTO)
invoiceDate:20/01/2017
customer:6
uangMuka:0.00
description:keterangan aja, wkwkwkwwk
item:38
qty:10
unit:1
price:10000
discount:0.00
dt:P
totalberat:100
province:DKi Jakarta
city:DKI Jakarta
alamatTujuan:Jl. Villa Kapuk Mas 1 Blok F2 No.10
ppn:null
item:40
qty:10
unit:1
price:10000
discount:0.00
dt:P
ongkir:18500
see carefully, i sent two times with key item
, qty
, unit
, price
, discount
and dt
. 仔细看,我发送了两次关键
item
, qty
, unit
, price
, discount
和dt
。
i tried with POSTMAN
and it success when the server
receive that. 我尝试使用
POSTMAN
并且server
接收到它时成功。
now i am trying to implement that value with retrofit2
现在我正在尝试通过
retrofit2
实现该价值
this is what i tried. 这就是我尝试过的。
@FormUrlEncoded
@POST("api/orderPenjualan/save")
Call<String> postOrder(@Field("invoiceNo") String invoiceNo,
@Field("invoiceDate") String invoiceDate,
@Field("customer") String userId,
@Field("ppn") Object nullValue, //how to post null value
@Field("uangMuka") String cashAdvance,
@Field("description") String description,
//loop parameter if more than one item
@Field("item") int itemId,
@Field("qty") double qty,
@Field("unit") int unit,
@Field("price") double price,
@Field("discount") double discount,
@Field("dt") String point,
@Field("userdetail") String userdetailConstant,
@Field("tokenku") String tokenkuConstant);
@Multipart
@POST("api/orderPenjualan/save")
Call<String> postOrderWithBody(@Part MultipartBody.Part fields //body not working
);
@POST("api/orderPenjualan/save")
Call<String> postOrderWithMap(@Query("invoiceNo") String invoiceNo,
@Query("invoiceDate") String invoiceDate,
@Query("customer") int userId,
@Query("ppn") String nullValue, //how to post "null" value
@Query("uangMuka") double cashAdvance, //0.00
@Query("description") String description,
@Query("totalberat") int weight,
@Query("province") String province,
@Query("city") String city,
@Query("alamatTujuan") String destAddress,
@Query("ongkir") String ongkir,
//loop parameter if more than one item
@Body() RequestBody fields, //body not working
@Query("userdetail") String userdetailConstant,
@Query("tokenku") String tokenkuConstant);
when i tried to execute this code, the server just receive item:38 qty:10 unit:1 price:10000 discount:0.00 dt:P
当我尝试执行此代码时,服务器仅收到
item:38 qty:10 unit:1 price:10000 discount:0.00 dt:P
not with this item:40 qty:10 unit:1 price:10000 discount:0.00 dt:P
不适用于此
item:40 qty:10 unit:1 price:10000 discount:0.00 dt:P
before i use retrofit, i use this code to handle 在使用改造之前,我使用此代码来处理
for(int i=0; i<mItemDataItem.size(); i++) {
HelperAddItem hai = mItemDataItem.get(i);
final String FmItemId = String.valueOf(hai.getmItemId());
final String FmItemQty = String.valueOf(hai.getmQty());
final String FmUnitId = String.valueOf(hai.getmUnitId());
final String FmPrice = String.valueOf(hai.getmPrice());
final String FmDiscount = String.valueOf(hai.getmDiscountNominal());
final String FmDT = (hai.getmDiscountType() == 1 ? "P" : "PS");
parameter.add(new BasicNameValuePair("item", String.valueOf(FmItemId)));
parameter.add(new BasicNameValuePair("qty", String.valueOf(FmItemQty)));
parameter.add(new BasicNameValuePair("unit", String.valueOf(FmUnitId)));
parameter.add(new BasicNameValuePair("price", String.valueOf(FmPrice)));
parameter.add(new BasicNameValuePair("discount", String.valueOf(FmDiscount)));
parameter.add(new BasicNameValuePair("dt", FmDT));
}
but how about in retrofit2? 但是在Retrofit2中呢?
this code work for me... but i want to use retrofit2 此代码为我工作...但我想使用retrofit2
AsyncTask postServer = new AsyncTask() {
protected String mResponse = "";
protected ProgressDialog dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(CheckOutActivity.this);
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.setMessage("Harap tunggu, Sedang menyimpan Order...");
dialog.show();
}
@Override
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
ArrayList parameter = new ArrayList();
parameter.add(new BasicNameValuePair("invoiceNo", invoice));
parameter.add(new BasicNameValuePair("invoiceDate", invoiceDate));
parameter.add(new BasicNameValuePair("customer", String.valueOf(userId)));
parameter.add(new BasicNameValuePair("ppn", "null"));
parameter.add(new BasicNameValuePair("uangMuka", String.valueOf(uangMuka)));
parameter.add(new BasicNameValuePair("description", String.valueOf(des)));
parameter.add(new BasicNameValuePair("province", String.valueOf(city.getProvince())));
parameter.add(new BasicNameValuePair("city", String.valueOf(city.getCity_name())));
parameter.add(new BasicNameValuePair("alamatTujuan", String.valueOf(detailAddress)));
parameter.add(new BasicNameValuePair("ongkir", String.valueOf(selectedOngkir)));
parameter.add(new BasicNameValuePair("userdetail", Constants.USERDETAIL));
parameter.add(new BasicNameValuePair("tokenku", Constants.TOKENKU));
for (int i = 0; i < orderList.size(); i++) {
ProductOrderModel current = orderList.get(i);
parameter.add(new BasicNameValuePair("item", String.valueOf(current.getItem())));
parameter.add(new BasicNameValuePair("qty", String.valueOf(current.getQty())));
parameter.add(new BasicNameValuePair("unit", String.valueOf(current.getUnit())));
parameter.add(new BasicNameValuePair("price", String.valueOf(current.getPrice())));
parameter.add(new BasicNameValuePair("discount", String.valueOf(current.getDiscount())));
parameter.add(new BasicNameValuePair("dt", current.getDt()));
}
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://192.168.0.106:8080/api/orderPenjualan/save");
try {
post.setEntity(new UrlEncodedFormEntity(parameter, "UTF-8"));
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
return mResponse = EntityUtils.toString(entity);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
dialog.dismiss();
Log.d(TAG, "onPostExecute: "+mResponse);
//Toast.makeText(mContext, result, Toast.LENGTH_SHORT).show();
}
};
postServer.execute();
通过此链接https://futurestud.io/tutorials/retrofit-multiple-query-parameters-of-same-name您将能够添加具有相同名称的多个查询参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.