2015-06-16 31 views
0

我在android工作室和即時通訊使用排球庫進行發佈請求點擊一個按鈕進行應用程序。發表請求凌空不發送參數的第一次點擊

我第一次按下按鈕時,響應始終爲空,但第二次正常工作。

下面的代碼:

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 

任何想法如何解決它?謝謝。

回答

0

您的返回字符串respuesta設置爲異步。

您看到的I/Server response:﹕ 1實際上是您從第一次按下按鈕後回到的響應。

您應該將日誌移動到onResponse

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