我有一个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会将数据插入数据库,并且我不想重复数据) 然后用户按Save并调用该API,该过程耗时超过1分钟。
在android中,它将显示一条消息,例如(“出了点问题-请重试),而在后端过程仍在进行中,最后它将插入数据,对吗?
当用户再次按下保存时,由于某些原因,响应时间不到1分钟。
总而言之,数据已提交两次,我不希望这样做。
我们如何避免这种情况?还是永远不会发生? ..如果我错了,请纠正我
谢谢。
答案 0 :(得分:1)
我在这里详述我的评论
假设您的服务器中有一个表,用于存储对服务器的所有请求。一列必须对每个请求具有唯一的ID,例如从您的android设备发送的UUID。
在您的android设备中,您向服务器发出的每个请求的标头/正文中都放置了UUID.randomUUID().toString()
。
服务器收到请求后,将在表中检查接收到的UUID是否与表中的任何UUID相匹配,如果找到一个,则表示这是重复的数据,您可以发送消息返回该数据已被插入。
如果找不到任何内容,则表示是新数据,服务器会将新的UUID以及您业务所需的信息保存在表中。