web-dev-qa-db-ja.com

後付けで配列/リストを送信する方法

リスト/ 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
        );

問題は、値がカンマ区切りではなくサーバーに到達することです。したがって、age:20、30ではなく、age:2030のような値があります。

私は読んでいました(例えばここ https://stackoverflow.com/a/372​​54442/1565635 )は、配列のように[]を使用してパラメーターを書き込むことで成功しましたが、age []:2030。また、配列と文字列を含むリストを使用してみました。同じ問題。すべてが1つのエントリに直接含まれます。

じゃあどうすればいい?

13
Tobias Reich

オブジェクトとして送信するには

これは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
};
16

レトロフィットはこれを行うことができます少なくともこれでテストしました-> 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
1
Goddard