我正在使用同步适配器与服务器同步数据。我正在使用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()));
不确定我做错了什么。我的猜测是,由于应用程序未运行,因此无法访问共享首选项。