2016-06-08 35 views
7

ho bisogno di inviare un elenco/una matrice di valori interi con Retrofit al server (tramite POST) lo faccio in questo modo:Come inviare Arrays/liste con Retrofit

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

e inviarlo come this:

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

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

Il problema è che i valori raggiungono il server non separati da virgola. Quindi i valori sono come età: 2030 anziché età: 20, 30.

stavo leggendo (per esempio qui https://stackoverflow.com/a/37254442/1565635) che alcuni avevano il successo scrivendo il parametro con [] come un array, ma che porta solo ai parametri chiamati età []: 2030. Ho anche provato ad usare matrici e liste con stringhe. Stesso problema. Tutto viene direttamente in una voce.

Quindi cosa posso fare?

risposta

10

da inviare come un oggetto

Questo è il vostro ISearchProfilePost.class

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

Qui inserire i dati postali di classe POJO

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

La classe chiamata retrofit

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

da inviare come una lista di array controllare questo link https://github.com/square/retrofit/issues/1064

si dimentica di aggiungere age[]

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

Bene, ma questo manda il mio oggetto come il corpo, ma non come un "allineamento" tra gli altri campi. O non è vero? –

+0

Vedere aggiornamento Risposta –

+0

risolto completamente il mio problema (y) –