所有请求中都有错误401的操作

时间:2017-04-17 08:55:48

标签: android retrofit2 okhttp

在应用程序的所有请求中,如果发生错误 401 ,则需要执行某项操作。 我不想手动在每个请求中处理此操作。

是否有可能在 OkHttp 级别解决此问题,以便立即立即应用于所有请求?

改造和OkHttp课程:

public class RestApi {

    public final User user;
    private PreferenceHelper preferenceHelper;

    public static final String TAG = "RestApi: ";

    @Inject
    public RestApi(PreferenceHelper preferenceHelper) {
        this.preferenceHelper = preferenceHelper;

        TokenAppendingHeaderInterceptor tokenInterceptor = new TokenAppendingHeaderInterceptor();
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .addInterceptor(tokenInterceptor)
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .build();


        Retrofit retrofit = new Retrofit.Builder().baseUrl(Const.Url.API)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        user = retrofit.create(User.class);
    }






    public class TokenAppendingHeaderInterceptor implements Interceptor {

        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            String token = preferenceHelper.getToken();
            Request newRequest = request.newBuilder()
                    .addHeader(Const.Url.COOKIE, token)
                    .build();
            return chain.proceed(newRequest);
        }
    }


    public String getCookiesFromResponse(Response response) {
        String cookies = "";
        List<String> listCookies;
        try {
            listCookies = response.headers().toMultimap().get("Set-COOKIE");
            cookies = CookieHelper.getStringCookies(listCookies);
        } catch (NullPointerException e) {
            Log.d(TAG, "getCookiesFromResponse: BITRIX can't send cookies");
        } finally {
            return cookies;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

在请求中添加用于身份验证的标头 在方法Intercept中的代码C:\中,添加像这样的hweader [R

php artisan config:cache

我认为它会对你有所帮助