android API的客户端等待时间

时间:2019-09-26 17:11:17

标签: java c# android api networking

我有一个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分钟。

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

我在这里详述我的评论

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

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

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

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