Android客户端等待时间 - java

我有一个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分钟的时间,出现了问题。

总之,数据已提交了两次,我不希望这样。

我们如何避免这种情况?还是永远不会发生? .. 如我错了请纠正我

谢谢。

参考方案

我在这里阐述我的评论;

假设您在服务器中有一个表,用于存储对服务器的所有请求。一栏必须为每个请求具有唯一的ID,例如从您的android设备发送的UUID。

在您的android设备中,您对服务器发出的每个请求的标头/正文中均应放置一个UUID.randomUUID().toString()

服务器收到请求后,将在表中检查接收到的UUID是否与表中的任何UUID相匹配,并且如果找到一个UUID,则表示这是重复的数据,您可以发送回一条消息,指出数据已插入。

如果找不到,则表示有新数据,服务器会将新的UUID以及您业务所需的信息保存在表中。

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

检查Optional中是否存在null属性,并返回String Java Stream API - java

我有以下class Person private String firstName; private String familyName; // Setters and Getters 我有以下方法public String getFullName(Optional<Person> persons) { return persons .map(p…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…