简体   繁体   English

如何使用Retrofit2在键中发布多个值

[英]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 . 仔细看,我发送了两次关键itemqtyunitpricediscountdt

在此处输入图片说明

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM