【问题标题】:Post request on volley not sending parameters on first click在第一次单击时不发送参数的 volley 上的发布请求
【发布时间】:2015-06-16 16:58:20
【问题描述】:

我正在 android studio 中制作一个应用程序,我正在使用 volley 库通过单击按钮来发出帖子请求。

我第一次按下按钮时响应总是为空,但第二次它可以正常工作。

代码如下:

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

关于如何修复它的任何想法?谢谢。

【问题讨论】:

    标签: android http-post android-volley


    【解决方案1】:

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

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

    你应该把你的日志移到onResponse

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-14
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      相关资源
      最近更新 更多