Sak*_*ain 5 api android retrofit retrofit2
我已经尝试了该网站上提供的所有可能的解决方案。我以前使用过改造,并且过去已经解决了这个问题,但这次我无法解决它。我正在使用 StackOverflow API 来获取问题及其详细信息。
\n\n\n \n\n\n
我用来调用的方法:
\n\n @GET\n Call<Item> getAllQuestionsInformation(@Url String url);\nRun 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 });\nRun Code Online (Sandbox Code Playgroud)\n\n我收到的错误:
\n\njava.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\nRun Code Online (Sandbox Code Playgroud)\n
.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,它没有标题...所以您可能需要映射到类Items和Item。
| 归档时间: |
|
| 查看次数: |
6766 次 |
| 最近记录: |