java - Android Volley 库给出了蜂窝数据连接超时错误

标签 java android android-volley

我在我的应用程序中使用 android volley 库,当我使用 wifi 时,它可以正常工作,但蜂窝数据连接似乎有问题。在某些具有蜂窝数据的手机(LG G3 Android 6、魅族 android 5.1)中,它不起作用并出现超时错误,但在(HTC desire 816 android 4.4、lg g3 android 5.0)中再次正常工作

问题是什么?

日志:

D/ERROR: error => com.android.volley.TimeoutError

代码:

showLoadingDialog();
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jobj = new JSONObject(response);
                    JSONObject jobjHRM = jobj.getJSONObject("HRM");
                    int status = jobjHRM.getInt("StatusCode");
                    if (status == 200) {
                        if (jobj.getJSONObject("Data").getBoolean("result") == true) {
                            login_info_editor.putInt("id", jobj.getJSONObject("Data").getInt("id"));
                            login_info_editor.putString("username", txtlayoutid.getEditText().getText().toString());
                                login_info_editor.putString("password", txtlayoutpass.getEditText().getText().toString());
                            login_info_editor.putBoolean("loged", true);
                            login_info_editor.commit();
                            checkversion();
                        } else {
                            login_info_editor.clear();
                            login_info_editor.commit();
                            txtlayoutid.requestFocus();
                            Toast.makeText(getApplicationContext(), "نام کاربری یا کلمه ی عبور اشتباه است", Toast.LENGTH_LONG).show();
                            txtlayoutid.startAnimation(shake);
                            txtlayoutpass.startAnimation(shake);
                            hideLoadingDialog();
                        }
                    } else {
                        Toast.makeText(getApplicationContext(), "ارور " + status, Toast.LENGTH_LONG).show();
                        }
                    } catch (JSONException e) {
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    hideLoadingDialog();
                    Log.d("ERROR", "error => " + error.toString());
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put(xxxxxx);
            params.put(xxxxxx);
            params.put(xxxxxx);
            return params;
        }

        @Override
        public String getBodyContentType() {
            return "application/x-www-form-urlencoded; charset=UTF-8";
        }
    };
    AppController.getInstance().addToRequestQueue(postRequest);

最佳答案

尝试配置重试策略。给一个大的超时并尝试,

int socketTimeout = 30000; // 30 seconds. You can change it
RetryPolicy policy = new DefaultRetryPolicy(socketTimeout,                 
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,     
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);

postRequest.setRetryPolicy(policy);
AppController.getInstance().addToRequestQueue(postRequest);

关于java - Android Volley 库给出了蜂窝数据连接超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35092911/

相关文章:

android - 混淆器 : can't find referenced class (to R. java)

android - 如果 Activity 正在运行,则抑制来自服务的通知

android - Android登录,但从mysql获取数据并添加sqlite

java - ArrayList的深拷贝

java - 无法添加 protobuf 自动生成类的一系列实例

android - 如何以编程方式向 Gridview 中的 Textview 添加权重

android - 每次在 volley 中击中 api 时显示响应

java - 我应该使用 DataInputStream 还是 BufferedInputStream

java - Android线程可运行性能

android - 如何在服务类中使用 Volley ?