Post volley 请求在第一次点击时不发送参数

Post request on volley not sending parameters on first click

我在 android studio 制作应用程序,我使用 volley 库通过单击按钮发出 post 请求。

我第一次按下按钮时,响应始终为空,但第二次它正常工作。

代码如下:

public class LoginActivity extends Activity{
Button btnEnviar;
EditText domn;
EditText user;
EditText pass;
String respuesta=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login_layout);


    btnEnviar = (Button)findViewById(R.id.btnLogin);
    domn = (EditText)findViewById(R.id.txtDominio);
    user = (EditText)findViewById(R.id.txtUser);
    pass = (EditText)findViewById(R.id.txtPassword);
    btnEnviar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String dominio = domn.getText().toString();
            String auth=loginRequest(("server url"));

            Log.i("Server response:", "" + auth);


            /*Intent i = new Intent(getApplicationContext(),MainActivity.class);
            startActivity(i);*/
        }
    });
}

public String loginRequest(String url){
    ;
    StringRequest request = new StringRequest(Request.Method.POST,url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
                    respuesta = s;
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError ex) {
                   // System.out.println(ex.getMessage().toString());
                }
            }
    ){
        @Override
        protected Map<String,String> getParams(){
            String usr = user.getText().toString();
            String psw = pass.getText().toString();
            Map<String,String> params = new HashMap<String, String>();
            params.put("User",usr);
            params.put("Pass",psw);
            params.put("DeviceName","Nombre");
            params.put("DeviceType","Tipo");
            params.put("OSVersion","Version");
            params.put("VendorID","ID");
            Log.i("USER:",usr);
            Log.i("PASS:", psw);

            return params;
    }
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String,String> params = new HashMap<String, String>();
            params.put("Content-Type","application/x-www-form-urlencoded");
            return params;
        }
    };

    RequestQueue queue = Volley.newRequestQueue(this);
    queue.add(request);
    return respuesta;
}

我也收到此日志响应:

第一次点击:

06-16 10:09:33.325  14628-14628/? I/Server response:﹕ null
06-16 10:09:33.375  14628-14744/? I/USER:﹕ username
06-16 10:09:33.375  14628-14744/? I/PASS:﹕ password

第二次点击:

06-16 10:09:48.945  14628-14628/? I/Server response:﹕ 1
TOKEN
06-16 10:09:48.955  14628-14759/? I/USER:﹕ username
06-16 10:09:48.955  14628-14759/? I/PASS:﹕ password

知道如何解决吗?谢谢

您的 return 字符串 respuesta 是异步设置的。

您看到的 I/Server response:﹕ 1 实际上是您第一次按下按钮后得到的响应。

您应该将日志移至 onResponse

public void onResponse(String s) {
    respuesta = s;
    //todo add log and logic here
}