【发布时间】:2020-01-27 00:31:28
【问题描述】:
我有一个 android 应用程序,它使用 Retrofit 向 API 发出请求。 一切正常,但我担心是否有人可以向我澄清这一点。
在 android 中,我创建了一个 OkHttpClient,如下所示:
private static OkHttpClient getClient() {
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.build();
return okHttpClient;
}
我给客户打电话如下:
public static IAPI getAPITest() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://***/api/")
.addConverterFactory(GsonConverterFactory.create())
.client(getClient())
.build();
iApi = retrofit.create(IAPI .class);
return iApi;
}
所以据我了解,客户端可以等待后端的响应 1 分钟。
现在想象我有一个只需要提交一次的表单(API 会将数据插入数据库,我不希望数据重复) 用户按下保存键,API 被调用,耗时超过 1 分钟。
在 android 中,它会显示一条消息,例如(“出现问题 - 重试),而在后端进程仍在继续,最后它会插入数据,对吧?
当用户再次按保存时出现问题,由于某些原因,响应时间不到 1 分钟。
总之,数据已经提交了两次,我不希望这样。
我们怎样才能避免这种情况呢?或者它永远不会发生? ..如果我错了,请纠正我
谢谢。
【问题讨论】:
-
您可以向服务器发送
UUID.randomUUID().toString(),将其存储在表中(例如),每次发送请求时检查服务器中是否已存在该 UUID。 -
@danielctf 我没明白你的意思,你能详细说明一下吗?
标签: java c# android api networking