2016-12-08 53 views
0

我正在開發的Android客戶端應用程序,我的API要求我在ArrayList<String>發送圖片的名稱,如:Retrofit2問題與發帖陣列

collection[0] = 15a877ce9f22bc8349cac80565c4bff6.jpg 
collection[1] = 25a877ce9f22bc8349cac80565c4bff6.jpg 

,但是當我把它它去的形式,如:

collection[] = 15a877ce9f22bc8349cac80565c4bff6.jpg 
collection[] = 25a877ce9f22bc8349cac80565c4bff6.jpg 

我的更新接口:

@Field("collection[]") ArrayList<String> collection); 

我怎麼能實現所要求的結果呢?

任何幫助將不勝感激!謝謝!

回答

0

不要把[]@Field名字,我不知道爲什麼你這樣做,但那些被保留角色也可能是混亂的做...

您可以使用這樣的事情:

// ApiService.java 
@FormUrlEncoded 
@POST("/api/projectLost") 
public void projectMarkLost(
    @Field("apiKey") String apiKey, 
    @Field("project_id") int projectId, 
    @Field("lost_project_remark") String lostProjectRemark, 
    @Field("lost_project_reasons") ArrayList<Integer> lostProjectReasons, 
    Callback<JsonObject> cb 
); 

// Content wish to post 
POST content: 
apiKey = EzAvFvScs45a2DRI0MktdIDeVRbP59 
project_id = 986 
remark = testing 
details = [detail_1,detail_2] 
+0

我必須把它放在laravel後端。如果你不這樣做,它會以400個不好的請求來回復。導致我另一個不眠之夜實際:) –

+0

對不起聽到它......:/你有沒有想出一個解決方案? – Jaythaking

+0

是的,我發佈了一個自我回復 - 請看看。雖然找不到更多的「正統」解決方案 –

0

我發現使用Map才達到所希望的結果

@FormUrlEncoded 
@POST("user/news") 
Call<CreateNews> createNews(
     @Field("text") String text, 
     @FieldMap Map<String, String> collection); 

和在方法的一個解決方案:

public void createNews(String text, ArrayList<String> collection, final Callback<CreateNews> callback){ 
    News createNews = ServiceGenerator.createService(News.class); 

    SortedMap fields = new TreeMap<String, String>(); 

    for (int i = collection.size()-1 ; i >= 0 ; i--) { 
     fields.put("collection["+i+"]", collection.get(i)); 
    } 

    Call<CreateNews> call = createNews.createNews(text, fields); 
    call.enqueue(callback);