2016-05-14 2 views
3

Ich entwickle eine Anwendung, bei der der Benutzer zu irgendeinem Zeitpunkt eine beliebige Anzahl von Ländern aus einer Liste auswählen muss und ich die ausgewählten Namen über ein Multipart senden muss.Ist es möglich, einen String [] über Multipart mit Retrofit zu senden?

Ich lade keine Datei zusammen mit dem String [] hoch, aber es gibt keine Route zum Hochladen von Informationen, ohne dass es ein Multipart ist und ich habe keine Aussagen darüber, wie der Webserver funktioniert.

Ich habe versucht, es einfach zu senden, wie ein Array, Arraylist und JsonArray als solche:

@Headers({ 
    "Connection: Keep-Alive", 
}) 
@Multipart 
@PUT("/user/{id}") 
String updateUser(@Path("id") int userId, @Part("user[countries]") String[] countries); 

ich auch this solution versucht habe, aber ich es entweder falsch verstanden oder es funktioniert nicht. Hier ist der Code, den ich verwenden wollte:

ArrayList<String> countries = CountryManager.getInstance().getSelectedCountryIds(); 
RequestBody requestBody; 
LinkedHashMap<String, RequestBody> hashMap = new LinkedHashMap<>(); 

for(int i = 0; i < countries.size(); i++) { 
    requestBody = RequestBody.create(MediaType.parse("text/plain"), countries.get(i)); 
    hashMap.put("countries["+i+"]", requestBody); 
} 

und Ändern des Retrofit-Methode entsprechend:

@Headers({ 
    "Connection: Keep-Alive", 
}) 
@Multipart 
@PUT("/user/{id}") 
String updateUser(@Path("id") int userId, @PartMap() Map countries); 

jedoch bei allen Versuchen ich den Fehler retrofit.RetrofitError bekommen haben: Part Körper darf nicht null sein .

Ich habe auch erwähnt, dass die ChangeLog zur Nachrüstung erwähnt „Neu: iterable und Array-Unterstützung @Part Parameter MultipartBody.Part mit OkHttp des“, aber nach einigen Graben, habe ich das gegebene Beispiel ziemlich verwirrend zu dem Punkt, dass ich gefunden Ich war mir nicht sicher, wie ich es in meinen Code implementieren konnte und konnte kein Tutorial finden, das sogar das Senden von Arrays in einem Multipart erwähnte.

Ist so etwas einfach unmöglich?

+0

Die Lösung mit PartMap Annotation scheint richtig zu sein. Ich habe es in einigen Apps verwendet und funktioniert gut. Sind Sie sicher, dass alle Länder nicht null sind? – Pablo

Antwort

2

Ich weiß, ich bin spät für diese Antwort. Sie können @Query("someKey[]") zum Senden von Arraylist in Multipart verwenden. Hier ist das Arbeitsbeispiel.

Hoffnung Es wird jemandem helfen, der nach der Antwort sucht.

+0

wie die Arraylist in PHP zu analysieren – bipin

1

Verwenden Sie einfach @Part ("Artikel []") Listenelemente

So:

List<String> items = new ArrayList(); 
    items.add("1"); 
    items.add("2"); 
    items.add("3"); 

@Multipart 
@POST("/") 
Call<Result> yourMethod(@PartMap() Map<String, RequestBody> partMap, @PartMap() Map<String, RequestBody> map, @Part MultipartBody.Part file, @Part("items[]") List<String> items); 
+0

Wie analysiert man dieses Array in PHP ?? – bipin

Verwandte Themen