有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java改进BaseUrl和API

我正在学习如何使用改装库,但是我遇到了一个小问题

所以我设置了所有内容并运行了我的项目,但首先我发现了以下错误:

Caused by: java.lang.IllegalArgumentException: baseUrl must end in /:

所以我添加了“/”,但后来我意识到它不仅仅是这个,我应该只保留baseUrl,并将api添加到我创建的接口中

我试图以不同的方式添加api,但没有成功

以下是一些代码:

改装BaseUrl:

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://api.nytimes.com/svc/movies/v2/critics/full-time.json?api-key=abcdefghijklmnop")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

起初我像上面那样使用它,但经过一些研究,我发现我必须离开baseUrl,通过接口传递地址的另一半

接口-

public interface ConnectAPI {

    @GET("results")
    Call<List<Reviewers>> getReviewers();

}

我很高兴能得到一些帮助, 谢谢


共 (3) 个答案

  1. # 1 楼答案

    正如Gabe Sechan所说,在进行改造时,您需要为所有api调用设置一个相同的基本url,然后在每个端点的基础上附加url的其余部分。如果你把你的代码改成下面的,你应该很好

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

    和{}到

    public interface ConnectAPI {
    
        @GET("svc/movies/v2/critics/full-time.json?api-key=abcdefghijklmnop")
        Call<List<Reviewers>> getReviewers();
    
    }
    
  2. # 2 楼答案

    基本URL应该是要在该接口上进行的所有查询的根。其余部分应该是实际API接口上URL的一部分。因此,对于您的示例,基本URL可能应该是“https://api.nytimes.com/svc/movies/v2/“。虽然是其中的任何子集,例如”https://api.nytimes.com/只要接口拥有路径的所有其余部分,也可以工作。基本上,当发出实际的HTTP请求时,查询的URL会连接到基本URL的末尾

  3. # 3 楼答案

    //ApiClient class for BaseUrl(Retrofit)
    public class ApiClient {
    
        private static String BASE_URL="";
    
        private static OkHttpClient getOkHttpClient(){
            HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
            logging.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
            httpClient.addInterceptor(logging).addInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request original = chain.request();
                    HttpUrl originalHttpUrl = original.url();
                    HttpUrl url = originalHttpUrl.newBuilder().build();
                    Request.Builder requestBuilder = chain.request().newBuilder()
                            .addHeader("Content-Type","application/json")
                            .addHeader("timezone", TimeZone.getDefault().getID())
                            .url(url);
    
                    Request request = requestBuilder.build();
                    Response response = chain.proceed(request);
                    return response;
                }
            });
    
            return httpClient.connectTimeout(20, TimeUnit.SECONDS)
                    .readTimeout(10, TimeUnit.SECONDS)
                    .writeTimeout(10, TimeUnit.SECONDS)
                    .retryOnConnectionFailure(true)
                    .build();
        }
    
    
        private static Retrofit.Builder retrofitBuilder=new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(getOkHttpClient())
                .addConverterFactory(GsonConverterFactory.create());
    
    
        private static Retrofit retrofit=retrofitBuilder.build();
    
        private static ApiService apiService=retrofit.create(ApiService.class);
    
    
    
        public static ApiService getApiService(){
    
            return apiService;
    
        }
    }