2017-03-05 2 views
-1

Also habe ich eine statische Variable mit dem Namen isSuccessful all die Variable soll tun, sei wahr, wenn jemand erfolgreich anmelden konnte oder falsch sein, wenn sie nicht konnte. Ich habe es standardmäßig auf "false" gesetzt. Das von mir geschriebene PHP-Skript sendet die Nachricht "loginsuccess" und speichert sie in den onProgressUpdate-Parametern. Ich debuggte, um zu sehen, ob das in den Parametern gespeichert wurde, und die Kompilierung sagt, dass es das ist. Naja, dann kann ich nicht herausfinden, warum Successful nicht auf True geschaltet wird. Ich habe es darauf eingestellt. Sobald dies passiert, lasse ich die Login-Aktivität die homeScreen-Aktivität aufrufen. LoginTask:Boolescher Wert wird nicht ausgewertet, obwohl die Bedingungen erfüllt sind

public class LogInTask extends AsyncTask<String, String,String> { 
    public Scanner reader; 
    Formatter writer; 
    Context mcontext; 

    //if Login was successful 
    public static boolean isSuccessful; 

    LogInTask(Context context) 
    { 
     mcontext = context; 

    } 

    URL url; 
    URLConnection con; 
    String output = ""; 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     isSuccessful=false; 
     try { 
      url = new URL("http://192.168.1.75:1234/login.php"); 
      con = url.openConnection(); 
      //allows to send information 
      con.setDoOutput(true); 
      //allows to receive information 
      con.setDoInput(true); 
      writer = new Formatter(con.getOutputStream()); 
      //Sends login information to SQL table 
      writer.format("user_name="+params[0]+"&password="+params[1]); 
      writer.close(); 

      //Reads input 
      reader = new Scanner(con.getInputStream()); 
      while(reader.hasNext()) 
      { 

       output+= reader.next(); 
      } 
      reader.close(); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     publishProgress(output); 

     return output; 
    } 

    @Override 
    protected void onProgressUpdate(String... values) { 
     Toast.makeText(mcontext, values[0],Toast.LENGTH_LONG).show(); 
     if(values[0]=="loginsuccess") 
      isSuccessful = true; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
    } 
} 

LogInActivity:

public class LogInActivity extends Activity { 
    private Typeface fontRobo; 
    private TextView logoText; 
    private EditText userName; 
    private EditText passWord; 

    private TextView dontHave; 
    private TextView signUp; 

    private Button logIn; 
    Intent i; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_log_in); 
     i = new Intent(this, HomeActivity.class); 

     //Logo 
     logoText = (TextView)findViewById(R.id.Logo); 
     fontRobo = Typeface.createFromAsset(this.getAssets(),"fonts/ROBO.ttf"); 
     logoText.setText("ArtSpace"); 
     logoText.setTypeface(fontRobo); 

     //Don't have an account? 
     dontHave = (TextView) findViewById(R.id.Donthave); 
     dontHave.setTypeface(fontRobo); 

     //Sign Up 
     signUp = (TextView) findViewById(R.id.signUP); 
     signUp.setTypeface(fontRobo); 

     userName = (EditText) findViewById(R.id.userName); 
     passWord = (EditText) findViewById(R.id.passWord); 

     logIn = (Button) findViewById(R.id.LogIn); 

    } 
    //Log in button event 
    public void logInClick(View view) 
    { 
     final LogInTask task = new LogInTask(LogInActivity.this); 
     task.execute(userName.getText().toString(), passWord.getText().toString()); 
     if(LogInTask.isSuccessful) 
      startActivity(i); 

    } 

php:

<?php 
    require "conn.php"; 
    $user_name = $_POST['user_name']; 
    $user_pass = $_POST['password']; 
    $mysql_qry = "SELECT * FROM login WHERE UserName LIKE '$user_name' AND Password LIKE '$user_pass';"; 
    $result = mysqli_query($conn,$mysql_qry); 

    if(mysqli_num_rows($result) == true) 
    { 
     echo "login success"; 
    } 
    else 
    { 
     echo "login not success"; 

    } 
?> 
+3

gibt es keine php hier – nogad

+0

hinzugefügt @nogad php – user2626734

+0

Ihre SQL-Abfrage ist 1) offen für SQL-Injektionen, 2) mit LIKE anstelle von genauen Vergleichen, 3) die Datenbank String Vergleiche, wahrscheinlich Groß-und Kleinschreibung, 4) mit Passwörtern im Klartext gespeichert. – sisve

Antwort

1

task.execute() ist AsyncTask aka es dauert seine Zeit auszuführen. Aber Sie überprüfen direkt nachdem Sie es anrufen. Sie müssen die Überprüfung für isSuccessful in onPostExecute() blockieren. Etwas wie folgt aus:

final LogInTask task = new LogInTask(LogInActivity.this){ 
    @Override 
    protected void onPostExecute(String s) { 
    if(LogInTask.isSuccessful) 
     startActivity(i); 
    }}; 
    task.execute(userName.getText().toString(), passWord.getText().toString()); 

PS: Etwas anderes, nicht Strings vergleichen mit == Verwendung .equals()

if(values[0].equals("loginsuccess")) 
+0

versuchte es, immer noch kein Glück. debuggte es erneut und s ist gleich "Loginsuccess", aber immer noch aus irgendeinem Grund oder der andere ist Erfolg ist immer noch falsch. – user2626734

+0

Ja, es war ein dummer Fehler von mir. Deine Lösung hat funktioniert. Vielen Dank. – user2626734

+0

Wie heißt es übrigens, wenn Sie eine Methode wie Tgat eingeben? Sie fügen die Methode in die Variable ein. Wie heißt das? – user2626734

Verwandte Themen