Почему мы добавляем параметры запроса в запрос на получение? - PullRequest
0 голосов
/ 31 января 2019

Я очень новичок в Android, и я изучал Retrofit 2 для работы в сети, чтобы отправить Get, почему мы используем параметр Query?

Ответы [ 4 ]

0 голосов
/ 31 января 2019

Итак, вот простой способ понять это для тех, кто может захотеть использовать запрос Retrofit.Пожалуйста, проверьте следующее ....

  • Если вы укажете @GET ("Поиск? One = 5"), тогда любой @Query ("два") должен быть добавлен с помощью &, создавая что-то вродеПоиск? One = 5 & two = 7.
  • Если вы укажете @GET («Поиск»), то к первому @Query необходимо добавить «?», Создавая что-то вроде Search? Two = 7.
  • Вот как работает Retrofit.
  • Когда вы указываете @GET («Поиск?»), Retrofit считает, что вы уже задали какой-либо параметр запроса, и добавляет дополнительные параметры запроса, используя &.Удалите?, И вы получите желаемый результат.

    enter String BASE_URL = "https://api.test.com/";
    String API_KEY = "SFSDF24242353434";
    
    @GET("Search") //i.e https://api.test.com/Search?
    Call<Products> getProducts(
    @Query("one") String one, 
    @Query("two") String two,    
    @Query("key") String key
    )
    

Результат: https://api.test.com/Search?one=Whatever&two=here&key=SFSDF24242353434

0 голосов
/ 31 января 2019

Допустим, у вас есть следующий api для вызова: https://api.themoviedb.org/3/movie/now_playing/api_key=1

Поэтому, чтобы вы могли динамически передавать значение для "api_key", вы должны использовать @ Query ("api_key") как:

@GET("movie/now_playing")
Call<MovieData> getMovieData(@Query("api_key") String apiKey);
0 голосов
/ 31 января 2019

Нет необходимости отправлять параметры запроса с запросами GET.Это связано с тем, как конечная точка настроена на API, который вы пытаетесь использовать.

При разработке API, особенно методов GET, некоторые параметры можно оставить необязательными, указав их в качестве параметров запроса.

@ GET ("location") Ответ getUser (@QueryParam ("name") String name);

может вызываться как

/ location

/ location?name = test

Параметр запроса не ограничивается только запросами GET.Его можно использовать и с другими методами, например, DELETE и т. Д.

Это понятие относится к методам HTTP

0 голосов
/ 31 января 2019

Retrofit использует аннотации для перевода определенных ключей и значений в соответствующий формат.Использование аннотации @Query ("key") для строкового значения добавит параметр запроса с именем ключа и соответствующим строковым значением в URL запроса (конечно, вы можете использовать другие типы, кроме string:)).

На самом делеСуществуют API с конечными точками, позволяющими передавать (опционально) несколько параметров запроса.Вы хотите избежать объявления метода сервиса, как показано ниже, с «бесконечными» опциями для параметров запроса:

public interface NewsService() {  
    @GET("/news")
    Call<List<News>> getNews(
            @Query("page") int page,
            @Query("order") String order,
            @Query("author") String author,
            @Query("published_at") Date date,
            …
    );
}

Вы можете вызвать метод сервиса .getNews с нулевыми значениями для каждого из параметров, чтобы сделать их необязательными,Модификация будет игнорировать нулевые значения и не отображать их как параметры запроса.Однако есть лучшее решение для работы со сложными конечными точками API, имеющими различные параметры для параметров запроса.Не волнуйтесь, Retrofit помог вам!

Вы можете узнать больше по приведенной ниже ссылке: -

https://futurestud.io/tutorials/retrofit-2-add-multiple-query-parameter-with-querymap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...