2016-06-08 12 views
7

Ich brauche eine Liste/ein Array von Integer-Werte mit Retrofit an den Server zu senden (über POST) ich es auf diese Weise:Wie Arrays/Listen mit Retrofit senden

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

und senden Sie es wie dies:

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

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

Das Problem ist, die Werte erreichen den Server nicht durch Komma getrennt. Also die Werte dort sind wie Alter: 2030 statt Alter: 20, 30.

Ich las (zum Beispiel hier https://stackoverflow.com/a/37254442/1565635), dass ein gewisser Erfolg mit durch das Schreiben des Parameters hatte [] wie ein Array, aber das führt nur zu Parametern aufgerufen Alter []: 2030. Ich habe auch versucht, Arrays sowie Listen mit Strings zu verwenden. Gleiches Problem. Alles kommt direkt in einem Eintrag.

Was kann ich tun? Das ist Ihre ISearchProfilePost.class

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

Hier geben Sie die Post-Daten in pojo Klasse

Antwort

10

als Objekt

senden

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

Ihre Retrofit Anruf Klasse

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

als Array-Liste überprüfen Sie diesen Link https://github.com/square/retrofit/issues/1064

Sie age[]

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

Nun hinzuzufügen vergessen zu senden, aber dies sendet mein Objekt als den Körper, aber nicht als ein „Array“ unter anderen Bereichen. Oder nicht? –

+0

Siehe update Antwort –

+0

hat mein Problem vollständig gelöst (y) –