【问题标题】:Retrofit 2 check call URL改造 2 检查调用 URL
【发布时间】:2016-07-31 15:30:00
【问题描述】:

是否有可能将Call URL 与Retrofit 2 中的String 进行比较?

比如我们可以拿这个baseUrl:

https://www.google.com

还有这个Call

public interface ExampleService {
    @GET("dummy/{examplePartialUrl}/")
    Call<JsonObject> exampleList(@Path("examplePartialUrl") String examplePartialUrl;
}

带着这个请求:

Call<JsonObject> mCall = dummyService.exampleList("partialDummy")

在获得呼叫响应之前,有没有办法获得https://www.google.com/dummy/partialDummydummy/partialDummy

【问题讨论】:

    标签: android http retrofit retrofit2


    【解决方案1】:

    假设您将 OkHttp 与 Retrofit 一起使用,您可以执行以下操作:

    dummyService.exampleList("partialDummy").request().url().toString()

    根据 OkHttp 文档应该打印:

    https://www.google.com/dummy/partialDummy

    【讨论】:

    • 非常感谢,我还编辑了答案,添加了“.url()”以仅返回字符串格式的 url。
    • 感谢您的回复。你能解释一下,我们如何在使用 RxJava 的同时实现同样的目标?因为在这种情况下,返回类型将是 Observable 那么如何获取 request() 和 url ??
    • 如果我们将 Retrofit 2 与 RxJava 2 一起使用会怎样?
    【解决方案2】:
    Log.d(TAG, "onResponse: ConfigurationListener::"+call.request().url());
    

    【讨论】:

      【解决方案3】:

      我个人找到了另一种方法来实现这一点,即使用改造 2 和 RxJava

      首先你需要创建一个 OkHttpClient 对象

      private OkHttpClient provideOkHttpClient()
      {
          //this is the part where you will see all the logs of retrofit requests 
          //and responses
          HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
          logging.setLevel(HttpLoggingInterceptor.Level.BODY);
      
          return new OkHttpClient().newBuilder()
                  .connectTimeout(500, TimeUnit.MILLISECONDS)
                  .readTimeout(500,TimeUnit.MILLISECONDS)
                  .addInterceptor(logging)
                  .build();
      }
      

      创建此对象后,下一步就是在改造构建器中使用它

      public Retrofit provideRetrofit(OkHttpClient client, GsonConverterFactory convertorFactory,RxJava2CallAdapterFactory adapterFactory)
      {
          return new Retrofit.Builder()
                  .baseUrl(mBaseUrl)
                  .addConverterFactory(convertorFactory)
                  .addCallAdapterFactory(adapterFactory)
                  .client(client)
                  .build();
      }
      

      您可以分配给 Retrofit builder 的属性之一是客户端,从第一个函数将客户端设置为客户端。

      运行此代码后,您可以在 logcat 中搜索 OkHttp 标签,您将看到您发出的请求和响应。

      【讨论】:

        猜你喜欢
        • 2016-08-12
        • 2015-12-10
        • 1970-01-01
        • 2018-05-15
        • 2021-09-25
        • 2018-02-11
        • 2018-06-02
        相关资源
        最近更新 更多