android - 如何在 android retrofit 1.9 中从 List 发送多个 @Field?

标签 android android-sqlite retrofit

我不想修复@Field 名称来发送订单。我需要像这样发送到服务器 Key is 440005 and Value is 3,Juice, 该数据存在于 sqlite 数据库中。 440005 是 demo,实际上调用 String code = cart.getSubMenuItemCode() 3 是 cart.getQty() 而 Juice 是 cart.getName() 现在,我测试索引 0 以发送 1 行,但实际上我想发送多行。

应用程序接口(interface),

@FormUrlEncoded
@POST("/Order/Order")
void postOrder(@Field("table_no") String table,
               @Field("waiter_no") String waiter,
               @Field("440005") String code, // demo 440005
               Callback<Message> callback);

添加到购物车 Activity ,

btn_send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            List<Cart> carts = db.getAllCarts();
            /*for (Cart cart : carts) {
                Log.d("item_code", cart.getSubMenuItemCode());
                Log.d("qty", cart.getQty());
                Log.d("description", cart.getName());
            }*/
            StringBuilder result = new StringBuilder();
            result.append(carts.get(0).getQty()).append(",");
            result.append(carts.get(0).getName()).append(",");
            NetworkEngine.getInstance().postOrder(tableNo, waiterNo, result.toString(), new Callback<Message>() {
                @Override
                public void success(Message message, Response response) {
                    Toasty.success(CartActivity.this, "OK", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void failure(RetrofitError error) {

                }
            });


        }
    });

[ postman ]

最佳答案

解决方案:使用@FieldMap注解

第 1 步:更改服务界面中的方法

@FormUrlEncoded
@POST("/Order/Order")
void postOrder(@Field("table_no") String table_no, @Field("waiter_no") String waiter_no, @FieldMap Map<String, String> order,
               Callback<Message> callback);

第 2 步:创建您的订单图

Map<String, String> order = new HashMap<>();
order.put("440055", "5, Noodle");
order.put("440057", "2, Salad Soup");
order.put("440059", "1, Champagne");
// Put more data here if you want
...

第 3 步:将 map 传递给您的改造方法

NetworkEngine.getInstance().postOrder("table_1", "waiter_47", order, new Callback<Message>() {
            @Override
            public void success(Message message, Response response) {
                Toasty.success(CartActivity.this, "OK", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void failure(RetrofitError error) {

            }
        });

关于android - 如何在 android retrofit 1.9 中从 List 发送多个 @Field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49975843/

相关文章:

java - JSONException : No value for id

java - 如果在android中找不到元素如何抛出

android - socket.io 无法工作,我的 flutter 应用程序未连接到服务器或后端部分

android - 如何保护android数据库文件?

java - 房间数据库 - 外键约束失败错误代码 787

java - 如何通过 Intent 将新数据添加到数组列表

android - 我的应用似乎停止了。我不知道我的错误

android - 为特定调用设置超时

android - 改造+okhttp : Retrieve GZIPInputStream

android - Retrofit 在发出 GET 请求时返回空响应体