2016-04-19 7 views
0

Ich habe ein auf Klick Zuhörer, und dass auf Klick Zuhörer, ich habe ein, wenn, sonst statment, wieonResponse Boolesche Instanzvariable wird nicht gesetzt?

@Override 
     public void onClick(View v) { 
      postMethodRegister(); 
      System.out.println("mSuccess is set to " + mSuccess); 
      if (mSuccess) { 
       Intent login = new Intent(Login.this, MainActivity.class); 
       startActivity(login); 
      }else{ 
       Toast toast = Toast.makeText(getApplicationContext(), "Please Check your UserName or Password", Toast.LENGTH_LONG); 
       toast.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL, 0, 0); 
       toast.show(); 
      } 
     } 

folgt Ich habe auch eine Boolesche Variable, die standardmäßig auf false, privat boolean mSuccess gesetzt ist ; Wenn die onResponse ausgeführt wird, setze ich sie auf true, sonst setze ich sie auf false und führe die entsprechende Antwort aus, aber aus irgendeinem Grund führt der erste Versuch einer Anmeldung die onResponse aus, aber wenn es auf onClick ankommt, wird mSuccess auf gesetzt falsch was ist damit los? mSuccess ist eine Instanzvariable.

public void postMethodRegister() { 
    StringRequest request = new StringRequest(Request.Method.POST, loginUrl, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      System.out.println("On Response was thrown in Login"+response); 
      mSuccess=true; 
     } 

    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      System.out.println("Error was thrown in Login" + error.getMessage()+"and the response code is "); 
      mSuccess=false; 

     } 
    }) 

Antwort

1

postMethodRegister() Methode eine asynchrone Anforderung.

Also, wenn Sie auf Ihre Schaltfläche onClick() ruft aufgerufen wird, die wiederum ruft postMethodRegister(). Dann führt postMethodRegister() eine asynchrone Netzwerkanforderung aus, was bedeutet, dass Ihre Netzwerkanforderung in einem anderen Thread ausgeführt wird. Anschließend wird das Steuerelement sofort in die nächste Zeile verschoben, nachdem postMethodRegister()System.out.println("mSuccess is set to " + mSuccess); ist. Jetzt an diesem Punkt, da Sie keine Antwort von onResponse() haben, so wird mSuccess unverändert (und wird falsch sein).

+0

Ich sehe das macht viel Sinn! Jede schnelle Lösung, die Sie für dieses Problem vorschlagen? – eli

+0

Sie können schreiben, wenn Block-Code in onResponse() und sonst blockieren Code in onErrorResponse() nach dem Entfernen beider Blöcke von onClick(). –

+0

Stimmt, guten Ruf danke! – eli

Verwandte Themen