【问题标题】:How to add Header in Retrofit2如何在 Retrofit2 中添加标题
【发布时间】:2019-12-19 23:56:45
【问题描述】:

我很困惑,我已将令牌保存在 SharedPrefernce 中,当我尝试获取用户名时,即使我已经使用了 Header 和 Sharedpref 令牌,我仍然无法使对象首选项为空。也许我的错误是没有给 Header 进行改造。在这里,我很困惑父亲般地添加标题。我使用了现有的参考资料,但它不起作用。我求求你是否有出路我真的希望你能帮助我。

RetrofitClient.java

public class RetrofitClient {

        SharedPrefManager sharedPrefManager;
        private static Retrofit retrofit = null;

        public static Retrofit getClient(String baseUrl){
            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            OkHttpClient client = new OkHttpClient.Builder()
                                        .addInterceptor(interceptor)
                                        .build();

            if (retrofit == null){
                retrofit = new Retrofit.Builder()
                        .baseUrl(baseUrl)
                        .addConverterFactory(GsonConverterFactory.create())
                        .client(client)
                        .build();
            }
            return retrofit;
        }
    }

此令牌保存

SharedPrefManager sharedPrefManager;
sharedPrefManager.getSPToken()

【问题讨论】:

  • 你在哪里使用 sharedPrefManager 参考?
  • SharedPrefManager sharedPrefManager; sharedPrefManager.getSPToken() 这个@toffo
  • 这个prnt.sc/qd51e3@toffo
  • 好的,但是您没有在代码中使用 getSPtoken() 结果?但是您正在寻找拦截器,我想看看这个gist.github.com/alex-shpak/da1e65f52dc916716930。
  • 没错,我缺少一个中介来保存我的令牌并将其进行改造。从您在这种情况下发送的链接中我没有使用刷新令牌,是否有任何代码? @toffor

标签: java jwt retrofit2


【解决方案1】:

这是示例改造客户端

 public class RetrofitClient {


        private static Retrofit retrofit = null;

        public static Retrofit getClient(String baseUrl){
            HeaderInterceptor interceptor = new HeaderInterceptor();
            OkHttpClient client = new OkHttpClient.Builder()
                    .addInterceptor(interceptor)
                    .build();

            if (retrofit == null){
                retrofit = new Retrofit.Builder()
                        .baseUrl(baseUrl)
                        .addConverterFactory(GsonConverterFactory.create())
                        .client(client)
                        .build();
            }
            return retrofit;
        }
    }

您的用例的拦截器。

public class HeaderInterceptor implements Interceptor {

    SharedPrefManager sharedPrefManager = new SharedPrefManager();

    @Override
    public Response intercept(Chain chain) throws IOException {

        Request originalRequest = chain.request();

        Request newRequest = originalRequest.newBuilder()
                .header("Language", sharedPrefManager.getSPToken())
                .build();

        return chain.proceed(newRequest);

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多