【问题标题】:client waiting time for API androidAPI android的客户端等待时间
【发布时间】: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


【解决方案1】:

我在这里详细说明我的评论;

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

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

当服务器收到请求时,它会检查表中接收到的 UUID 是否与表中的任何 UUID 匹配,如果找到,则表示这是重复数据,您可以发送消息返回数据已经插入。

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

【讨论】:

  • 听起来是个不错的解决方案!我会尝试并回复你!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2016-10-10
  • 2012-03-20
相关资源
最近更新 更多