2015-09-27 4 views
1

Я после этой должности: http://inthecheesefactory.com/blog/retrofit-2.0/enдооснащения 2 перехватчики имеет частный доступ

и пытается добавить перехватчик следующим образом:

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() { 

I получить сообщение об ошибке

'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?

+0

У меня есть тот же код 'client.interceptors(). Add (новый Interceptor() "отлично работает с модифицированной версией 2.0.0 beta1. Поэтому нет проблем с модифицированной версией, которую вы используете. – DGN

ответ

2

Edit (правда дела) -

Ваш код должен быть в методе, а не только в классе.

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; 
     } 
    }); 
    } 
} 

Edit (другая возможность) -

Оказывается, вы также можете увидеть эту ошибку, если у вас есть незакрытый объем в коде идет до этого кода. Например,

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() { 

ПримечаниеЭтот отсутствует() 's после interceptors. Дважды проверьте свой код во всех местах, которые вы вызываете interceptors, чтобы узнать, пропустили ли вы круглые скобки.

+0

Ошибка ссылается на «перехватчик», а не «перехватчики»() «Я тоже не пропустил круглые скобки в моем коде. – jilbot

+0

Я все еще думаю, что где-то есть синтаксическая ошибка. Какой код у вас есть непосредственно над этим кодом Возможно ли, что у вас есть незавершенный анонимный объект?См. Edit – iagreen

+0

Я отредактировал исходное сообщение, чтобы добавить весь класс. Несомненно, там есть синтаксическая ошибка. – jilbot

Смежные вопросы