应用程序未运行时,同步适配器API调用失败

时间:2017-10-25 02:48:33

标签: android sharedpreferences okhttp3 android-syncadapter

我正在使用同步适配器与服务器同步数据。我正在使用okhttp3的Interceptor类,如下所示:

 public class CustomRequestInterceptor implements Interceptor {


    @Inject
    SharedPreferenceManager sharedPreferenceManager;

    public CustomRequestInterceptor() {
        MyApp.component().inject(this);
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request().newBuilder().header("Accept", "application/json").header("Authorization", getToken()).build();

        long t1 = System.nanoTime();
        Log.d(TAG, String.format("Sending request %s on %s%n%s", request.url(), chain.connection(), request.headers()));

        Response response = chain.proceed(request);

        long t2 = System.nanoTime();
        Log.d(TAG, String.format("Received response for %s in %.1fms%n%s", response.request().url(), (t2 - t1) / 1e6d, response.headers()));

        return response;
    }

    private String getToken() {
        String token = sharedPreferenceManager.getAccessToken(MyApp.getContext());
        if (token != null) {
            return "Bearer " + token;
        }
        Log.e("REQUEST", "Token is NULL");
        return "";
    }
}

当我运行应用程序时,前景或背景都运行良好。但是当我关闭应用程序时,因为我正在使用同步服务,API调用仍然会被解雇。我面临的问题是当应用程序关闭时,所有API都失败,因为缺少访问令牌的标头(根据Charles日志),但我确实看到在Android logcat中,带有访问令牌的标头将打印在我的日志中

 Log.d(TAG, String.format("Sending request %s on %s%n%s", request.url(), chain.connection(), request.headers()));

不确定我做错了什么。我的猜测是,由于应用程序未运行,因此无法访问共享首选项。

0 个答案:

没有答案