在另一个 class 中初始化改造 class

Initializing retrofit class in another class

我正在开发一个改造应用程序,我正在学习一个教程,但在教程中他总是在每个 class:

中创建以下内容
       Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://jsonplaceholder.typicode.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

现在我创建了一个名为 APIClient 的复古 class 客户端,其中包含上述内容以及一些安全性。这是我的 API 客户:

public class APIClient {
    private static OkHttpClient.Builder httpClient;

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl("http://10.0.2.2:8080")
                    .addConverterFactory(GsonConverterFactory.create());

    public static <S> S createService(Class<S> serviceClass) {
        return createService(serviceClass, null);
    }

    public static <S> S createService(Class<S> serviceClass, final Token token) {

        if(httpClient == null){
            System.out.println("client null");
            httpClient = new OkHttpClient.Builder();
            if (!token.getToken().contains("null")) {
                System.out.println("Token not null " + token.getToken());
                httpClient.addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        Request original = chain.request();
                        Request.Builder requestBuilder = original.newBuilder()
                                .header("Accept", "application/json")
                                .header("Authorization", token.getToken())
                                .method(original.method(), original.body());

                        Request request = requestBuilder.build();
                        return chain.proceed(request);
                    }
                });
            }
            httpClient.connectTimeout(50, TimeUnit.SECONDS);
            httpClient.addInterceptor(addLogging());
        }

        OkHttpClient client = httpClient.build();
        Retrofit retrofit = builder.client(client).build();
        return retrofit.create(serviceClass);
    }



    private static HttpLoggingInterceptor addLogging(){

        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();

        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        return logging;
    }

}

现在在我关注的教程中,他执行以下操作:

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://jsonplaceholder.typicode.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    JsonPlaceHolderApi jsonPlaceHolderApi = retrofit.create(JsonPlaceHolderApi.class);

    Call<List<Post>> call = jsonPlaceHolderApi.getPosts();

有什么办法可以用我的 class 消除整个 Retrofit retrofit = new Retrofit.Builder() 但仍然使用 retrofit.create 部分?

public class APIClient {

    private static final String BASE_URL = "http://10.0.2.2:8080/";

    private static OkHttpClient.Builder httpClient;
    private Retrofit retrofit;




    private APIClient() {
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();

        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();
    }


    public static <S> S createService(Class<S> serviceClass) {
        return createService(serviceClass, null);
    }

    public static <S> S createService(Class<S> serviceClass, final MediaSession.Token token) {

        if (httpClient == null) {
            System.out.println("client null");
            httpClient = new OkHttpClient.Builder();
            if (!token.getToken().contains("null")) {
                System.out.println("Token not null " + token.getToken());
                httpClient.addInterceptor(new Interceptor() {
                    @Override
                    public okhttp3.Response intercept(Chain chain) throws IOException {
                        Request original = chain.request();
                        Request.Builder requestBuilder = original.newBuilder()
                                .header("Accept", "application/json")
                                .header("Authorization", token.getToken())
                                .method(original.method(), original.body());

                        Request request = requestBuilder.build();
                        return chain.proceed(request);
                    }
                });
            }
            httpClient.connectTimeout(50, TimeUnit.SECONDS);
            httpClient.addInterceptor(addLogging());
        }

        OkHttpClient client = httpClient.build();
        Retrofit retrofit = builder.client(client).build();
        return retrofit.create(serviceClass);
    }


    private static HttpLoggingInterceptor addLogging() {

        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();

        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
        return logging;
    }


}

Call<List<Post>> call = APIClient.createService(JsonPlaceHolderApi.class).getPosts();