2014-12-03 42 views
4

我想post數據如下:如何使用Retrofit發佈數組參數?

{ 
    "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); 

     } 

這是正確的方法是什麼?

+0

看看這個:http://stackoverflow.com/questions/21398598/how-to-post-raw-whole-json-in-the-body-of-a-retrofit-request – TommySM 2016-05-17 21:20:16

回答

-2

如果查詢參數列表是固定的,你可以這樣做:

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

否則,將map你需要設置完整的查詢參數的關鍵:

values.put("user[email]", "[email protected]"); 
values.put("user[password]", "123456"); 

此答案直接複製:Github Retrofit

1

這樣它會發送像這樣的參數

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.

1

如果有許多用戶,則使用FieldMap

用戶[0] [電子郵件] = &用戶[0] [口令] = &用戶[1] [電子郵件] = &用戶[1] [口令] =

@POST("/user/sign_in") 

用戶登錄(@FieldMap Map<String,String> 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); 
    }