【问题标题】:Retrofit 2 interceptors has private accessRetrofit 2 拦截器具有私有访问权限
【发布时间】:2015-12-25 02:42:05
【问题描述】:

我正在关注这个帖子:http://inthecheesefactory.com/blog/retrofit-2.0/en

并尝试按如下方式添加拦截器:

package test.com.testretrofit2;

import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Response;

import java.io.IOException;

public class InterceptorTest {

  OkHttpClient client = new OkHttpClient();
  client.interceptors().add(new Interceptor() {
      @Override
      public Response intercept(Chain chain) throws IOException {
          Response response = chain.proceed(chain.request());

          // Do anything with response here

          return response;
      }
  });
}  

不过,就行了

client.interceptors().add(new Interceptor() {

我收到一个错误

'interceptors' has private access in com.squareup.okhttp.OkHttpClient.

我正在使用

com.squareup.retrofit:retrofit:2.0.0-beta1

它正在引入 okhttp-2.5.0。我查看了 OkhttpClient.java 并且interceptors() 是公开的。

我是否使用了错误的 Retrofit 2.0 库或版本?

【问题讨论】:

  • 我得到了相同的代码 'client.interceptors().add(new Interceptor()' 与改造版本 2.0.0 beta1 一起工作正常。所以你正在使用的改造版本没有问题.

标签: android retrofit interceptor okhttp


【解决方案1】:

编辑(事情的真相)--

您的代码需要在方法中,而不仅仅是在类中。

public class InterceptorTest {

  void myTest() {
    OkHttpClient client = new OkHttpClient();
    client.interceptors().add(new Interceptor() {
      @Override
      public Response intercept(Chain chain) throws IOException {
        Response response = chain.proceed(chain.request());

        // Do anything with response here

        return response;
      }
    });
  }
} 

编辑(另一种可能性)--

事实证明,如果您在此代码之前的代码中有未终止的范围,您也会看到此错误。例如,

new Thread(new Runnable() {
  @Override
  public void run() {

  });
client.interceptors().add(new SigningInterceptor());

将显示您在 IDE 中指出的错误,但在编译时会出现更多错误。请注意,Runnable 在此示例中未正确终止。它缺少}。检查以确保您的 {} 位于应有的位置。

原始选项--

您的错误与您发布的代码不匹配。如果该函数具有私有访问权限,您应该会收到一条错误消息,指出 --

'interceptors()' has private access in com.squareup.okhttp.OkHttpClient.

注意 () 的。

在这种情况下很重要,因为OkHttpClient 有一个名为interceptors 的私有成员,但有一个公共interceptors() 方法。

人们会预料到您在这一行看到的错误 --

client.interceptors.add(new Interceptor() {

注意interceptors 后面缺少的 ()。在您调用interceptors 的所有地方仔细检查您的代码,看看您是否错过了括号。

【讨论】:

  • 错误指的是“拦截器”而不是“拦截器()”我也没有错过代码中的括号。如上图。
  • 我仍然认为某处存在语法错误。您在该代码上方有什么代码?你有没有可能有一个未终止的匿名对象?见编辑
  • 我编辑了原始帖子以添加整个课程。毫无疑问,某处存在语法错误。
  • 哦,看在皮特的份上!透过树林看不到森林!
  • 发生在我们最好的人身上!我第一次看你的编辑时没有看到它。如果这解决了您的问题,能否将此答案标记为已接受?
猜你喜欢
  • 2023-03-23
  • 2020-03-01
  • 2013-10-27
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多