改造 - 基本 url 必须以 / 结尾

Sak*_*ain 5 api android retrofit retrofit2

我已经尝试了该网站上提供的所有可能的解决方案。我以前使用过改造,并且过去已经解决了这个问题,但这次我无法解决它。我正在使用 StackOverflow API 来获取问题及其详细信息。

\n\n
\n

API:\n https://api.stackexchange.com/2.2/questions?order=asc&sort=votes&site=stackoverflow&tagged=android&filter=withbody

\n
\n\n

我用来调用的方法:

\n\n
    @GET\n    Call<Item> getAllQuestionsInformation(@Url String url);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的带有日志拦截器的改造实例代码:

\n\n
        String url="https://api.stackexchange.com/2.2/questions?order=asc&sort=votes&site=stackoverflow&tagged=android&filter=withbody/";\n        builder=new OkHttpClient.Builder();\n        HttpLoggingInterceptor httpLoggingInterceptor=new HttpLoggingInterceptor();\n        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);\n        builder.addInterceptor(httpLoggingInterceptor);\n        Retrofit retrofit=new Retrofit.Builder()\n                .baseUrl(url)\n                .addConverterFactory(GsonConverterFactory.create())\n                .client(builder.build())\n                .build();\n        allApiService=retrofit.create(AllApiService.class);\n        final Call<Item> itemCall=allApiService.getAllQuestionsInformation(url);\n        itemCall.enqueue(new Callback<Item>() {\n            @Override\n            public void onResponse(Call<Item> call, Response<Item> response) {\n                Log.v("Info",""+response.body().getTitle());\n                questionTitleArrayList.add(response.body().getTitle());\n            }\n\n            @Override\n            public void onFailure(Call<Item> call, Throwable t) {\n                Log.v("Error",""+t.getMessage());\n            }\n        });\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到的错误:

\n\n
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.shakil.com.retrofit_paginationrecyclerview/app.shakil.com.retrofit_paginationrecyclerview.MainActivity}: java.lang.IllegalArgumentException: baseUrl must end in /: https://api.stackexchange.com/2.2/questions?order=asc&sort=votes&site=stackoverflow&tagged=android&filter=withbody/\n        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)\n        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)\n        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)\n        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)\n        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)\n        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)\n        at android.os.Handler.dispatchMessage(Handler.java:106)\n        at android.os.Looper.loop(Looper.java:193)\n        at android.app.ActivityThread.main(ActivityThread.java:6669)\n        at java.lang.reflect.Method.invoke(Native Method)\n        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)\n     Caused by: java.lang.IllegalArgumentException: baseUrl must end in /: https://api.stackexchange.com/2.2/questions?order=asc&sort=votes&site=stackoverflow&tagged=android&filter=withbody/\n        at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:513)\n        at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:456)\n        at app.shakil.com.retrofit_paginationrecyclerview.MainActivity.getQuestionInformationWithTitle(MainActivity.java:57)\n        at app.shakil.com.retrofit_paginationrecyclerview.MainActivity.onCreate(MainActivity.java:36)\n        at android.app.Activity.performCreate(Activity.java:7136)\n        at android.app.Activity.performCreate(Activity.java:7127)\n        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)\n        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)\n        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)\xc2\xa0\n        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)\xc2\xa0\n        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)\xc2\xa0\n        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)\xc2\xa0\n        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)\xc2\xa0\n        at android.os.Handler.dispatchMessage(Handler.java:106)\xc2\xa0\n        at android.os.Looper.loop(Looper.java:193)\xc2\xa0\n        at android.app.ActivityThread.main(ActivityThread.java:6669)\xc2\xa0\n        at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)\xc2\xa0\n        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)\xc2\xa0\n
Run Code Online (Sandbox Code Playgroud)\n

Mar*_*ler 4

.baseUrl()包括API版本https://api.stackexchange.com/2.2/,每个请求的版本应该相同,并且更新到较新的 API 版本也更省力。该请求应如下所示:

@GET("questions")
Call<Items> getQuestions(
    @Query(value = "order")  String sortOrder,
    @Query(value = "sort")   String sortField,
    @Query(value = "site")   String site,
    @Query(value = "tagged") String tagged,
    @Query(value = "filter") String filter
);
Run Code Online (Sandbox Code Playgroud)

response.body().getTitle()似乎是错误的,因为响应 JSON 的根节点是items,它没有标题...所以您可能需要映射到类ItemsItem