如何用凌空解决“我的请求被执行了两次”?

How to fix ‘My request is executed twice’ with volley?

我正在开发具有客户端/服务器类型架构的 Android 移动应用程序。总之,应用程序连接到服务器以贷记或借记用户帐户。 我使用 Android Volley 与服务器建立连接。第一个问题说明如下:

** 由于某些原因,当我运行一个移动客户端请求扣款账户时,请求被发送了两次,导致账户被扣款两次。

想了想,这大概是排球接口RetryPolicy的问题。我将暂定数设置为 0,这会导致下一个问题。

** 当我发起请求时,过了一会儿,手机客户端收到一个错误(服务器没有响应)但是服务器上已经完成了操作(账户已经被扣款)

如何解决问题?同一个请求无论连接状态如何,用户的余额都必须被借记或记入一次。

您可以在Volley中设置setRetryPolicy。 DEFAULT_MAX_RETRIES 表示请求将在出现问题时重试 1 次,因此在这种情况下总共将执行 2 次。

所以在setRetryPolicy

中将DEFAULT_MAX_RETRIES改为0
req.setRetryPolicy(new DefaultRetryPolicy(
                DefaultRetryPolicy.DEFAULT_TIMEOUT_MS,
                0, //Change DEFAULT_MAX_RETRIES to 0 for no retry
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

0表示不重试