Где определен класс Request? - PullRequest
1 голос
/ 05 марта 2019

Baeldung имеет хорошее введение в Retrofit .Я пытаюсь использовать некоторые идеи из расширенной версии GitHubServiceGenerator (под заголовком «7. Ведение журнала»):

public class GitHubServiceGenerator {

    private static final String BASE_URL = "https://api.github.com/";

    private static Retrofit.Builder builder
      = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create());

    private static Retrofit retrofit = builder.build();

    private static OkHttpClient.Builder httpClient
      = new OkHttpClient.Builder();

    private static HttpLoggingInterceptor logging
      = new HttpLoggingInterceptor()
        .setLevel(HttpLoggingInterceptor.Level.BASIC);

    public static <S> S createService(Class<S> serviceClass) {
        if (!httpClient.interceptors().contains(logging)) {
            httpClient.addInterceptor(logging);
            builder.client(httpClient.build());
            retrofit = builder.build();
        }
        return retrofit.create(serviceClass);
    }

    public static <S> S createService(Class<S> serviceClass, final String token) {
        if (token != null) {
            httpClient.interceptors().clear();
            httpClient.addInterceptor( chain -> {
                Request original = chain.request();
                Request.Builder builder1 = original.newBuilder()
                  .header("Authorization", token);
                Request request = builder1.build();
                return chain.proceed(request);
            });
            builder.client(httpClient.build());
            retrofit = builder.build();
        }
        return retrofit.create(serviceClass);
    }
}

В коде появляются следующие строки:

Request original = chain.request();
Request.Builder builder1 = original.newBuilder()
  .header("Authorization", token);
Request request = builder1.build();

Я получаю ошибку компиляции:

cannot find symbol
  symbol:   class Request

Где найти класс Request?

1 Ответ

1 голос
/ 06 марта 2019

Похоже, это okhttp3.Request.

Вы можете найти его, посмотрев, где он используется, а затем проверив API этого вызывающего абонента. В этом случае он используется в методе httpClient.addInterceptor(), и вы можете увидеть в размещенном вами фрагменте, что httpClient относится к классу OkHttpClient.Builder.

Быстрый поиск показывает, что OkHttpClient.Builder происходит из пакета okhttp3 okhttp3.OkHttpClient.Builder, который является тем же пакетом, который определяет класс Request, который вы искали.

Это также согласуется с разделом «Обзор» размещенной вами ссылки, в которой упоминаются «Квадрат» и «Охтпп»:

Retrofit - это безопасный для типов HTTP-клиент для Android и Java, разработанный компанией Square (Dagger, Okhttp).

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