【问题标题】:How to post array parameters with Retrofit?如何使用 Retrofit 发布数组参数?
【发布时间】:2016-10-13 15:54:48
【问题描述】:

我想post数据如下:

   {
     "user_id":"14545646",
    "list":["4545645","4545645","4545645","4545645"]
   }

我使用了以下Retrofit方法:

interface DeleteOrder {

         @FormUrlEncoded
         @POST("/api/shop/deleteOrder.json")
         void getPoJoDeleteOrder(@Field("user_id") String user_id, @Field("list") String[] list,Callback<PoJoDeleteOrder> callback);

      }

这是正确的方法吗?

【问题讨论】:

标签: retrofit


【解决方案1】:

如果有很多用户,则使用FieldMap

user[0][email]=&user[0][password]=&user[1][email]=&user[1 ][密码]=

@POST("/user/sign_in")

用户登录(@FieldMap Map&lt;String,String&gt; fields);

    Map<String,String> fields = new HashMap<>();
    for (int i=0;i<users.size();i++) {
        User user= users.get(i);
        fields.put("user["+i+"][email]",user.email);
        fields.put("user["+i+"][password]",user.password);
    }

【讨论】:

    【解决方案2】:

    这样它会发送这样的参数

    project_id=986&remark=testing&details=detail_1....
    

    如果要发送JSON格式的数组,需要在数组名后面加上[]。

     @FormUrlEncoded
        @POST("/api/projectLost")
        public void projectMarkLost(
            @Field("project_id") int projectId,
            @Field("lost_project_reasons[]") ArrayList<Integer> lostProjectReasons,
            Callback<JsonObject> cb
        );
    

    这样您就可以使用 is_array($arr) 检查数组参数,然后对其进行迭代。 Source link.

    【讨论】:

      【解决方案3】:

      如果查询参数列表是固定的,您可以这样做:

      @POST("/user/sign_in")
      User login(
          @Query("user[email]") String email,
          @Query("user[password]") String password);
      

      否则,使用map,您需要将完整的查询参数设置为键:

      values.put("user[email]", "foo@bar.com");
      values.put("user[password]", "123456");
      

      此答案直接复制自:Github Retrofit

      【讨论】:

        猜你喜欢
        • 2017-06-08
        • 2018-02-20
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 2020-03-29
        • 2014-03-20
        • 2015-08-04
        • 1970-01-01
        相关资源
        最近更新 更多