Je cherche un moyen d'ajouter un tableau int (par exemple [0,1,3,5]) comme paramètre dans un [~ # ~] get [~ # ~] demande avec retrofit 2. Ensuite, l'url générée doit être comme ceci: http: // server/service? array = [0,1,3,5]
Comment faire ça?
J'ai finalement trouvé une solution en utilisant la méthode Arrays.toString (int []) et en supprimant les espaces dans ce résultat car Arrays.toString retourne "[0, 1, 3, 5]". Et ma méthode de demande ressemble à ceci
@GET("http://server/service")
Observable<Void> getSomething(@Query("array") String array);
Ajoutez-le simplement comme paramètre de requête
@GET("http://server/service")
Observable<Void> getSomething(@Query("array") List<Integer> array);
Vous pouvez également utiliser int [] ou Integer ... comme dernier paramètre;
Vous devez nommer votre paramètre de requête avec une syntaxe de tableau comme ceci:
@GET("http://server/service")
Observable<Void> getSomething(@Query("array[]") List<Integer> array);
La syntaxe elle-même variera en fonction de la technologie d'arrière-plan utilisée, mais ne pas inclure les crochets "[]" sera normalement interprété comme une valeur unique.
Par exemple, en utilisant array=1&array=2
sera généralement interprété par les backends comme seulement array=1
ou array=2
au lieu de array=[1,2]
.
J'ai rencontré un problème similaire et j'ai dû faire deux ou trois choses pour atteindre le formulaire acceptable (comme demandé dans la question).
Converti une liste de tableaux en chaîne
arrayList.toString().replace(" ", "")
Dans la méthode RetroFit, j'ai changé le paramètre Query qui accepte la liste de tableaux ci-dessus comme suit:
@Query(value = "cities", encoded = true)
Cela garantit que les crochets et les virgules ne sont pas encodés en URL.
L'utilisation de toString
n'a pas fonctionné pour moi. Au lieu de cela, TextUtils.join(",", ids)
fait l'affaire.
N'oubliez pas de marquer le Query
avec encoded = true
.
Eh bien, cela a fait l'affaire pour moi
Étape 1:
Dans StateServce.kt
@GET("states/v1")
fun getStatesByCoordinates(@Query("coordinates", encoded = true) coordinates: String) : Call<ApiResponse<List<State>>>
Étape 2
Lors d'un appel à partir du référentiel
val mCoordinate : List<Double> = [22.333, 22.22]
mStateService?.getStatesByCoordinates(mCoordinate.toString().replace(" ", ""))!!