我正在关注此帖子: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,并且拦截器()是公共的。

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

最佳答案

编辑(问题的真相)-

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

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的所有位置仔细检查代码,以查看是否遗漏了括号。

08-04 19:20