如何使用Retrofit发送数组/列表

时间:2016-06-08 09:36:15

标签: android http-post retrofit

我需要将一个列表/一个Integer值数组与Retrofit一起发送到服务器(通过POST) 我是这样做的:

@FormUrlEncoded
@POST("/profile/searchProfile")
Call<ResponseBody> postSearchProfile(
        @Field("age") List<Integer> age
};

并像这样发送:

ArrayList<Integer> ages = new ArrayList<>();
        ages.add(20);
        ages.add(30);

ISearchProfilePost iSearchProfile = gsonServerAPIRetrofit.create(ISearchProfilePost.class);
        Call<ResponseBody> call = iSearchProfile.postSearchProfile(
                ages
        );

问题是,值到达服务器而不是以逗号分隔。所以这里的值就像年龄:2030 而不是年龄:20,30

我正在阅读(例如这里https://stackoverflow.com/a/37254442/1565635),有些人通过使用[]编写参数来获得成功,就像数组一样,但这只会导致名为 age []:2030 的参数。 我也尝试使用Arrays以及带字符串的列表。同样的问题。一切都直接在一个条目中。

那我该怎么办?

2 个答案:

答案 0 :(得分:15)

作为对象发送

这是你的ISearchProfilePost.class

@FormUrlEncoded
@POST("/profile/searchProfile")
Call<ResponseBody> postSearchProfile(@Body ArrayListAge ages);

在这里,您将在pojo类中输入发布数据

public class ArrayListAge{
    @SerializedName("age")
    @Expose
    private ArrayList<String> ages;
    public ArrayListAge(ArrayList<String> ages) {
        this.ages=ages;
    }
}

您的改装通话课程

ArrayList<Integer> ages = new ArrayList<>();
        ages.add(20);
        ages.add(30);

ArrayListAge arrayListAge = new ArrayListAge(ages);
ISearchProfilePost iSearchProfile = gsonServerAPIRetrofit.create(ISearchProfilePost.class);
Call<ResponseBody> call = iSearchProfile.postSearchProfile(arrayListAge);

要作为数组列表发送,请检查此链接https://github.com/square/retrofit/issues/1064

您忘了添加age[]

@FormUrlEncoded
@POST("/profile/searchProfile")
Call<ResponseBody> postSearchProfile(
    @Field("age[]") List<Integer> age
};

答案 1 :(得分:1)

至少在我对此进行了测试之后,Retrofit现在可以做到这一点-> implementation 'com.squareup.retrofit2:retrofit:2.1.0'

例如

@FormUrlEncoded
@POST("index.php?action=item")
Call<Reply> updateStartManyItem(@Header("Authorization") String auth_token, @Field("items[]") List<Integer> items, @Field("method") String method);

这是我们正在寻找的作品。

@Field("items[]") List<Integer> items