2016-04-01 7 views
0

Ich erstelle eine Android-App mit Android Studio. Die Anmeldeseite prüft Benutzer-Benutzername und Kennwortdetails anhand von Details, die in einer MYSQL-Datenbank mit PHP gespeichert sind, und gibt dem Benutzer Informationen darüber, ob die eingegebenen Daten erfolgreich oder nicht erfolgreich sind. Ich kann derzeit keine neue Aktivität öffnen, wenn die Anmeldung erfolgreich ist. Kann mir bitte jemand helfen? Vielen Dank.Öffnen Sie eine neue Aktivität nach erfolgreicher Anmeldung Android Studio-App

public class BackgroundWorker extends AsyncTask<String,Void,String> { 
    Context context; 
    AlertDialog alertDialog; 
    BackgroundWorker (Context ctx) { 
     context = ctx; 
    } 
    @Override 
    protected String doInBackground(String... params) { 
     String type = params[0]; 
     String login_url = "http://192.168.1.10/stafflogin.php"; 
     String createAccount_url = "http://192.168.1.10/staffcreateaccount.php"; 
     if(type.equals("login")) { 
      try { 
       String user_name = params[1]; 
       String password = params[2]; 
       URL url = new URL(login_url); 
       HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
       httpURLConnection.setRequestMethod("POST"); 
       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 
       OutputStream outputStream = httpURLConnection.getOutputStream(); 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
       String post_data = URLEncoder.encode("user_name","UTF-8")+"="+URLEncoder.encode(user_name,"UTF-8")+"&" 
         +URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(password,"UTF-8"); 
       bufferedWriter.write(post_data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 
       InputStream inputStream = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
       String result=""; 
       String line=""; 
       while((line = bufferedReader.readLine())!= null) { 
        result += line; 
       } 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 
       return result; 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     alertDialog = new AlertDialog.Builder(context).create(); 
     alertDialog.setTitle("Login Status"); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     alertDialog.setMessage(result); 
     alertDialog.show(); 


    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 

} 
+0

was ist das Ergebnis, das Sie bekommen? –

+0

Ich bekomme gerade eine Nachricht zu sagen, ob die Anmeldung erfolgreich oder nicht erfolgreich ist. Die Nachricht stammt aus der PHP-Datei. – PeterJenkin

+0

Verwenden Sie Ihre onPostExecute-Methode, um eine neue Aktivität zu starten – user3641702

Antwort

1

in onPostExecute Methode fügen Sie diese

if(result!=null && result.equals("successful")){ 
Intent intent = new Intent(LoginActivity.this,NextActivity.class); 
startActivity(intent); 
} 

Ich schrieb Probe code.please Verwendung richtigen Werte bei "erfolgreich", LoginActivity, NextActivity.

0

Wie Sie gesagt haben Sie eine Nachricht bekommen ... für eine erfolgreiche Anmeldung oder nicht erfolgreich dann können Sie wie neue Aktivität öffnen .. In OnPostExecute() ..

if(result!=null && result.equalsIgnoreCase(message from PHP on succesful)) 
{ 
Intent intent = new Intent(context, NextPage.class); 
      startActivity(intent); 
      finish(); 
} 

hoffe, dies wird Ihnen helfen, ..

0

Angenommen, Sie erhalten den Erfolgscode 200 (Status OK). Hier ist, was Sie versuchen können.

public class BackgroundWorker extends AsyncTask<String, Void, String> { 
    ... 
    BackgroundWorker (Context ctx) { 
    context = ctx.getApplicationContext(); 
    } 
    boolean statusOk = false; 

     @Override 
     protected String doInBackground(String... params) { 
      ... 
      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1")); 
      String result = ""; 
      String line = ""; 
      int statusCode = httpURLConnection.getResponseCode(); //get response code 

      if (statusCode == HttpURLConnection.HTTP_OK) { 
       while ((line = bufferedReader.readLine()) != null) { 
        result += line; 
       } 
       bufferedReader.close(); 
       statusOk = true; 
       return result; 
      } 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      if (statusOk) { 

       Intent intent = new Intent(context, MainPage.class);// replace MainPage with the activity you want to start 
       context.startActivity(intent); 
      } 

     } 
    } 
0

Da Sie sind ein Ergebnis nach dem Ausführen der php Datei erhalten, können Sie die onPostExecute() Methode verwenden, um ein neues activity zu starten. Und wenn Sie möchten, dass Sie data auf die neue activity passieren kann, die sich von hier zum Öffnen wird unter Verwendung folgender code

@Override 
    protected void onPostExecute(String result) { 
     if(result!=null && results.equals("what ever you receive from the php"){ 
      Intent i= new Intent(this,theNameOfTheActivityToBeOpen.class); 
      i.putExtra("nameYouWantToReferInOtherActivity",result); 
      startActivity(i); 
    } 
    else{ 
     } 
      alertDialog.setMessage(result); 
      alertDialog.show(); 

und zu empfangen, was an die neue Aktivität Verwendung zugeführt wird Code folgende

Bundle anyNameForYourBundle=getIntent().getExtras(); 
    //since a String is passed 
    String temp = anyNameForYourBundle.getString("nameYouWantToReferInOtherActivity"); 
+0

Was von der 'doInBackground'-Methode zurückgegeben wird, wird automatisch an die' onPostExecute'-Methode übergeben, sodass Sie den Wert von 'result' in' onPostExecute' abrufen können –

0

Versuchen Sie dies ist das Arbeiten

public class BackgroundWorker extends AsyncTask<String, Void, String> { 
    ... 
BackgroundWorker (Context ctx) { 
context = ctx.getApplicationContext(); 
} 
boolean statusOk = false; 

    @Override 
    protected String doInBackground(String... params) { 
     ... 
     InputStream inputStream = httpURLConnection.getInputStream(); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "iso-8859-1")); 
     String result = ""; 
     String line = ""; 
     int statusCode = httpURLConnection.getResponseCode(); //get response code 

     if (statusCode == HttpURLConnection.HTTP_OK) { 
      while ((line = bufferedReader.readLine()) != null) { 
       result += line; 
      } 
      bufferedReader.close(); 
      statusOk = true; 
      return result; 
     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     if (statusOk) { 

      Intent intent = new Intent(context, MainPage.class);// replace MainPage with the activity you want to start 
      context.startActivity(intent); 
     } 

    } 
} 
Verwandte Themen