我在我的Android项目中使用OkHttp,我每隔15分钟就会与服务器同步一些数据。我遇到的问题是,当同步开始时,我使用OkHttp向安全域发出异步发布请求,在服务器端我记录请求时间/数据以进行调试。
检查日志,我发现有时候我有2,3个相同的请求同时使用相同的数据而不是一个同步请求。
以下是负责发布请求的类的相关部分:
public class PostClientData {
private static OkHttpClient client = new OkHttpClient();
public PostClientData(String baseUrl) {
BASE_URL = baseUrl;
client.setRetryOnConnectionFailure(false);
client.setConnectTimeout(120, TimeUnit.SECONDS);
client.setProxy(Proxy.NO_PROXY);
client.setFollowRedirects(true);
client.setFollowSslRedirects(true);
}
public static void post(String url, HashMap<String, String> postParams, Callback responseHandler) {
String postData = getPostData(postParams);
String absUrl = getAbsoluteUrl(url);
RequestBody body = RequestBody.create(PLAIN, postData);
Request request = new Request.Builder()
.url(absUrl)
.post(body)
.build();
client.newCall(request).enqueue(responseHandler);
}
}
我在服务中使用此调用。每15分钟使用一次警报启动该服务。我检查了,警报每15分钟只发射一次。我搜索并发现可能是因为请求失败,并且客户端重试相同的请求(但我添加了setRetryOnConnectionFailure (false)
)。