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
}
我在 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
}