Retriofit Url Querying - PullRequest
       7

Retriofit Url Querying

0 голосов
/ 24 сентября 2018

Я использую Retrofit для работы в сети в своем приложении Books Android.

Вот URL запроса.

https://www.googleapis.com/books/v1/volumes?q=subject:android

Я хочу спросить, как я могу использовать его для модернизации, так как в конце он содержит двоеточие, и я не знаю, как это сделать.Я новичок в этом.Как мне получить (subject: android) в конце этого?Я искал его в Интернете, но не нашел никакого решения.

Я искал документацию по модернизации, но ничего не нашел об этом.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы можете попробовать @Query.

Интерфейс :

public interface NetworkService {
    @GET("books/v1/volumes")
    Call<ResponseBody> getSubject(@Query(value = "q") String subjectName);
}

Использование :

public static final String url = "https://www.googleapis.com/";

// onCreate()
Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create());

Retrofit retrofit = builder.build();
NetworkService client = retrofit.create(NetworkService.class);

Call<ResponseBody> call = client.getSubject("subject:android");
call.enqueue(new Callback<ResponseBody>()...);

ИЛИ

@QueryMap.

Интерфейс :

public interface NetworkService {
    @GET("books/v1/volumes")
    Call<ResponseBody> getSubject(@QueryMap() Map<String, String> queryMap);
}

Использование :

public static final String url = "https://www.googleapis.com/";

// onCreate()
Retrofit.Builder builder = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create());

Retrofit retrofit = builder.build();
NetworkService client = retrofit.create(NetworkService.class);

Map<String, String> subjectMap = new HashMap<>();
subjectMap.put("q", "subject:android");

Call<ResponseBody> call = client.getSubject(subjectMap);
call.enqueue(new Callback<ResponseBody>()...);

Необязательно :

Вы можете указать, являются ли имя и значение параметра уже URL-адресом.

Когда установлено значение true: "https://www.googleapis.com/books/v1/volumes?q=subject:android".

Когда false (по умолчанию): "https://www.googleapis.com/books/v1/volumes?q=subject%3Aandroid".

Call<ResponseBody> getSubject(@Query(value = "q", encoded = true) String subjectName); // for @Query
Call<ResponseBody> getSubject(@QueryMap(encoded = true) Map<String, String> queryMap); // for @QueryMap
0 голосов
/ 24 сентября 2018

Попробуйте, используя @Path аннотацию

@GET(books/v1/volumes?q=subject:{subject})
Call<ResponseBody> getBooks(@Path String subject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...