当前位置: 首页 > 知识库问答 >
问题:

使用代理时android截击双重请求

常宸
2023-03-14

我的代码有一个问题,对我来说效果很好,但当我使用代理进行拦截时,它会向我发送一个双重请求。我想解决这个错误,只发送一次。我在查看网页时发现了一个类似的问题,但我对这种语言还不熟悉,不知道如何实现它。

当有慢速请求时,Android截击双发

我的代码:

@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);
        }
    });
}

共有1个答案

邹修真
2023-03-14

您好,我可以找到答案,实际上很简单,只需在代码中添加一行代码

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);
        }
    });
}
 类似资料:
  • 当我做POST请求调用使用JsonObjectRequest在凌空然后在某些wifi它是发送空的身体。但是它可以很好地处理StringRequest POST请求。它在所有移动网络上都运行良好。 我正在使用node。js服务器和expressjs/body解析器。当我使用邮递员发出邮件请求时,一切正常。 错误是什么?如果有人想看我能提供的代码。 使用StringRequest的POST请求 POS

  • 当我在android截击请求的OneErrorRepsonse中收到错误时,我想重试该请求。我怎样才能做到这一点?

  • 我正在用GoogleVolley Api创建一个android应用程序,它处理我的应用程序和php脚本之间的连接。出于某种原因,该应用程序没有向我的服务器发送任何数据,也许这里的某个人可以找到它? 我的方法被正确调用,但是当我尝试打印它时,它返回null!一切实际上都在工作,除了数据没有正确传递,我相信,因为我的php脚本抱怨变量为空

  • 我需要发送如下内容: 我该怎么做?如果我尝试使用此代码,它将不起作用: 我认为我应该创建一个,但我不知道如何做到这一点。

  • 我正在使用截击与API交互。我需要向返回JSON数组的服务发送post请求(带参数)。 JsonObjectRequest有一个构造函数,它接受一个方法和一组参数 但是JSONArrayRequest(我需要的一个)只有一个构造函数的形式 我如何才能使其发送包含数据的POST请求?

  • 我有curl请求从Android推送数据到服务器。下面是Curl请求: 我应该如何使用截击进行post请求?我很困惑,因为我不知道该放在哪里: 所以请任何人帮我完成这件事。任何答案都是可贵的。非常感谢。安静!