2017-08-07 2 views
1

Diese senden ist meine Schnittstelle:Retrofit - dynamische Abfragen mit demselben Schlüssel

public interface ServerCalls{ 
     @GET 
     Call<List<Integer>> searchNames(@Url String url, @QueryMap Map<String, 
     String> options); 
    } 
} 

und das ist mein Aufruf:

APIs.LoadDataService service = 
     retrofit.create(APIs.LoadDataService.class); 
     Map<String, String> parameters = new HashMap<>(); 
     parameters.put("name","yoni"); 
     parameters.put("name","albert"); 
     parameters.put("q","text"); 
     Call<List<Integer>> call = service.searchNames(APIs.GET_NAMES, parameters); 

einen Anruf mit dynamischen Abfragen machen i so verwendet werden, müssen @QueryMap Ich muss mit einer Map arbeiten. mein Problem ist, wenn ich den gleichen Schlüssel senden muss, weil Map immer den letzten Wert von Schlüssel und nicht unterstützt doppelt erhalten.

mein api, so etwas bekommen müssen:

myapi.com/getLastName?name=yoni&name=albert 

, wie ich es tun kann? (ohne Guava-Bibliothek)

+0

Kannst du nicht die API ändern? Das ist komisches Design, wenn es eine Liste von Namen erwartet, dann sollte es zum Beispiel ein Array im Body sein. –

+0

Mögliches Duplikat von [Hinzufügen doppelter Parameter mit Retrofit v1.9.0] (https://stackoverflow.com/questions/28776381/adding-duplicate-parameters-with-retrofit-v1-9-0) –

Antwort

0

Sie können @Query("name") List<String> names verwenden.

Beispiel:

public interface Api { 
    @GET("/getLastName") 
    Call<ResponseBody> getLastName(@Query("name") List<String> names, 
            @QueryMap Map<String, String> otherUniqueKeys); 
} 

List<String> names = new ArrayList(); 
names.add("yoni"); 
names.add("albert"); 

// create an instance of Api interface with retrofit 
Api api = ... 
api.getLastName(names).enqueue(new Callback<ResponseBody>() { 
    @Override 
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 

    } 

    @Override 
    public void onFailure(Call<ResponseBody> call, Throwable t) { 

    } 
}); 

Weitere Details zu this Link.

+0

dies ist, was ich tue. .. – Yoni

+0

@Yoni Ich habe meine Antwort aktualisiert. –

+0

aber was macht diese Ausgabe: Name = Yoni, Albert Ich brauche: Name = Yoni & Name = Albert – Yoni

0

Make-Schnittstelle wie diese

@POST 
Call<Response> dynamicCall(
     @Url String url, 
     @Body Object object); 

Verbrauch:

dynamicCall(url,Object); 

Ich hoffe, dies wird Ihnen helfen.

Verwandte Themen