【问题标题】:android volley double request when I use proxy我使用代理时的android volley双重请求
【发布时间】:2021-03-14 02:35:58
【问题描述】:

我的代码对我来说效果很好,但是当我使用代理拦截时,它会向我发送双重请求。我想解决这个错误并且只发送一次。我正在检查网络,发现了一个类似的问题,但我是这种语言的新手,我不知道如何实现它。

Android Volley double post when have slow request

我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    final EditText usernameEditText = findViewById(R.id.username);
    final EditText passwordEditText = findViewById(R.id.pwd);
    final Button loginButton = findViewById(R.id.btnLogin);

    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            
            final String URL = "https://www.myurl.com/login.php";

            String username = usernameEditText.getText().toString();
            String pwd = passwordEditText.getText().toString();

            RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

            StringRequest stringRequest = new StringRequest(POST, URL, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject r = new JSONObject(response);

                        String status = r.getString("msg");

                        if (status.equals("OK")) {
                            Intent secretIntent = new Intent().setClass(LoginActivity.this, MenuActivity.class);
                            startActivity(secretIntent);
                            finish();
                        } else {
                            Toast.makeText(LoginActivity.this, "Wrong Password", Toast.LENGTH_SHORT).show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                }
            }){
                @Override
                public Map<String, String> getParams() throws AuthFailureError {
                    HashMap<String, String> params = new HashMap<String, String>();
                    params.put("username", username);
                    params.put("pwd", pwd);
                    return params;
                }

            };
            requestQueue.add(stringRequest);
        }
    });
}

【问题讨论】:

    标签: android proxy android-volley


    【解决方案1】:

    你好,我可以找到答案,其实很简单,只需在代码中添加一行即可

    stringRequest.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    

    这是我的代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    
        final EditText usernameEditText = findViewById(R.id.username);
        final EditText passwordEditText = findViewById(R.id.pwd);
        final Button loginButton = findViewById(R.id.btnLogin);
    
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
                final String URL = "https://www.myurl.com/login.php";
    
                String username = usernameEditText.getText().toString();
                String pwd = passwordEditText.getText().toString();
    
                RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
    
                StringRequest stringRequest = new StringRequest(POST, URL, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject r = new JSONObject(response);
    
                            String status = r.getString("msg");
    
                            if (status.equals("OK")) {
                                Intent secretIntent = new Intent().setClass(LoginActivity.this, MenuActivity.class);
                                startActivity(secretIntent);
                                finish();
                            } else {
                                Toast.makeText(LoginActivity.this, "Wrong Password", Toast.LENGTH_SHORT).show();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
    
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        error.printStackTrace();
                    }
                }){
                    @Override
                    public Map<String, String> getParams() throws AuthFailureError {
                        HashMap<String, String> params = new HashMap<String, String>();
                        params.put("username", username);
                        params.put("pwd", pwd);
                        return params;
                    }
    
                };
                stringRequest.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
                requestQueue.add(stringRequest);
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多