Android:聊天APP

时间:2018-08-19 07:02:33

标签: php android android-volley

我正在使用FCM,php后端和Volley来处理请求的聊天应用程序。

最初,当我登录我的应用程序时,聊天可以正常且快速地进行,但是在一段时间后出现排球超时错误,并且由于我没有使用任何重试策略,聊天消息也会丢失。

如果我增加套接字超时并使用重试策略,则应用会挂起。

请帮助。

这是我正在调用API的代码段:

public void doNetworkRequest(int type, String url, final HashMap<String, String> params, Response.Listener requestListener, Response.ErrorListener errorListener) {
        StringRequest mRequest = new StringRequest(type, url, requestListener, errorListener) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                return params;
            }


            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<String, String>();
                return headers;
            }
        };
//        int socketTimeout = 500000;
//        RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
//        mRequest.setRetryPolicy(policy);
        mQueue.add(mRequest);
    }

更新:几乎每个API都会出现此问题,例如登录,注销,聊天等

3 个答案:

答案 0 :(得分:1)

尝试此代码

request.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));

这是用于重试失败的请求并自定义请求超时

答案 1 :(得分:0)

这可能是因为API调用频繁执行并受到挤压。如果您使用Android Studio进行开发,请在“ Android监控”标签中检查网络交易。您将了解到在同一时间发送了多少网络查询。

作为解决方案: 您可以执行发送请求的管道。为聊天消息和状态位存储HashMap值。每个请求在上一条消息同步后开始。在这种情况下,您不需要计时器或重试策略(除非即使单个请求网络也经常失败)

答案 2 :(得分:-1)

request.setRetryPolicy(new DefaultRetryPolicy(DEFAULT_TIMEOUT_MS, 
DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

增加您的DEFAULT_TIMEOUT_MS