Int配列(たとえば[0,1,3,5])を[〜#〜] get [〜#〜]のパラメータとして追加する方法を探しています次に、生成されるURLは次のようになります。 http:// server/service?array = [0,1,3,5]
これを行う方法 ?
Arrays.toString(int [])メソッドを使用し、Arrays.toStringが「[0、1、3、5]」を返すため、この結果からスペースを削除することにより、最終的にソリューションを見つけました。そして私のリクエストメソッドはこのようになります
@GET("http://server/service")
Observable<Void> getSomething(@Query("array") String array);
クエリパラメータとして追加するだけです
@GET("http://server/service")
Observable<Void> getSomething(@Query("array") List<Integer> array);
Int []またはInteger ...を最後のパラメーターとして使用することもできます。
次のような配列構文でクエリパラメータに名前を付ける必要があります。
@GET("http://server/service")
Observable<Void> getSomething(@Query("array[]") List<Integer> array);
構文自体は、使用されているバックエンドテクノロジによって異なりますが、角かっこ「[]」を含めない場合、通常は単一の値として解釈されます。
たとえば、array=1&array=2
を使用すると、バックエンドでは通常、array=1
ではなくarray=2
またはarray=[1,2]
としてのみ解釈されます。
私は同様の問題に直面し、(質問で尋ねられたように)許容できる形に到達するためにいくつかのことをしなければなりませんでした。
ArrayListを文字列に変換しました
arrayList.toString().replace(" ", "")
RetroFitメソッドで、上記のArrayListを受け入れるクエリパラメータを次のように変更しました。
@Query(value = "cities", encoded = true)
これにより、角括弧とコンマがURLエンコードされなくなります。
toString
を使用してもうまくいきませんでした。代わりに、TextUtils.join(",", ids)
がトリックを行います。
Query
にencoded = true
を付けることを忘れないでください。
まあこれは私のためのトリックをしました
ステップ1:
StateServce.kt
@GET("states/v1")
fun getStatesByCoordinates(@Query("coordinates", encoded = true) coordinates: String) : Call<ApiResponse<List<State>>>
ステップ2
リポジトリから呼び出している間
val mCoordinate : List<Double> = [22.333, 22.22]
mStateService?.getStatesByCoordinates(mCoordinate.toString().replace(" ", ""))!!