2017-07-03 4 views
1

Ich versuche, eine GET-API zu konsumieren, die in ihrer Liste der Abfrageparameter ein Array von Zeichenfolgen erwartet.Android Retrofit GET @Query ArrayList

Ich benutze Retrofit für die Aufgabe.

In der API-Schnittstelle, ich habe folgende definiert:

@GET("user/explore") 
Observable<User> fetchUsers(@Query("who") String who, 
                 @Query("category") ArrayList<String> categories); 

Ich bin mit Holz für die Protokollierung und in der Konsole sehe ich die Anforderung wird wie folgt aus:

http://192.168.2.208:3000/api/v1/user/explore?who=SOME_USER&category=SOME_CATEGORY 

Die voraussichtliche Anfrage sollte wie folgt aussehen:

http://192.168.2.208:3000/api/v1/user/explore?who=SOME_USER&category=[SOME_CATEGORY,SOME_CATEGORY1,SOME_CATEGORY2] 

Warum verhält sich Retrofit so? Weg Event obwohl Kategorien sind vom Typ String Arraylist?

Antwort

0
ArrayList<String> carArrList = new ArrayList<>(); 
     carArrList.add("a"); 
     carArrList.add("b"); 
     carArrList.add("c"); 
     String[] catArr = (String[]) carArrList.toArray(new String[carArrList.size()]); 
     String catStr = Arrays.toString(catArr); 

     catStr = catStr.replaceAll(" ", ""); 
     Log.e("catStr", catStr); 
     Call<User> call = apiService.fetchUsers(catStr); 
     call.enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Call<User> call, Response<User> response) { 
      } 

      @Override 
      public void onFailure(Call<User> call, Throwable t) { 
       // Log error here since request failed 
       Log.e(TAG, t.toString()); 
      } 
     }); 



@GET("list/") 
    Call<User> fetchUsers(@Query("category") String categories); 

letzte Anfrage erzeugt

list/?category=[a,b,c] 
+0

dies ist es nicht lösen, wird die Anfrage wie folgt nun gemacht wird: 'http://192.168.2.208:3000/api/v1/user/explore ? who = SOME_USER & category [] = SOME_CATEGORY' – Fouad

+0

meinst du, ich sollte die Array-Darstellung mit einem String erstellen? – Fouad

+0

überprüfen Sie die aktualisierte Antwort – Pavya