1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. pjanfred, 06.06.2012 #1
    pjanfred

    pjanfred Threadstarter Neuer Benutzer

    Hallo alle zusammen,

    ich habe folgendes Problem:

    Um einem Benutzer beim anmelden an meine App zu realisieren dass etwas passiert starte ich zunächst einen ProgressDialog und anschließend einen Thread in welchem der Anmeldevorgang realisiert wird.

    Diesem Thread übergebe ich dabei die Instanz meiner Activity um nach einem erfolgreichen Login Vorgang eine syncronized Funktion meiner Activity aufrufen zu können und den ProgressDialog zu beenden. (bis hier hin funktioniert alles)

    Der anschließende Versuch einen AlertDialog in der syncronized Funktion anzuzeigen endet jedoch mit einer Exception, obwohl selbiger Quelltext beim Aufruf ohne den Umweg über den Thread funktioniert.

    Hat jemand eine Idee wo mein Denkfehler liegt oder wie man es eigendlich machen sollte?

    Gruß
    Jan
     
  2. swordi, 06.06.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    du darfst deine UI nicht im thread verändern
     
  3. pjanfred, 06.06.2012 #3
    pjanfred

    pjanfred Threadstarter Neuer Benutzer

    okay, aber deshalb nutze ich ja eine synchronized Funktion. Hast du den eine andere Idee wie ich mein Vorhaben realisieren könnte?
     
  4. swordi, 06.06.2012 #4
    swordi

    swordi Gewerbliches Mitglied

    was hat eine synchronized methode damit zu tun ?

    nochmal nachlesen was genau synchronized bedeutet
     
  5. pjanfred, 06.06.2012 #5
    pjanfred

    pjanfred Threadstarter Neuer Benutzer

    okay, stimmt garnichts. Aber wie bekomme ich meine Idee nun realisiert?
     
  6. swordi, 06.06.2012 #6
    swordi

    swordi Gewerbliches Mitglied

    du musst wieder in den UI thread kommen.

    geschickt ist, wenn du dir mal den asynctask ansiehst

    ansonsten gibts noch handler oder runonUIthread()
     
  7. Tom299, 06.06.2012 #7
    Tom299

    Tom299 Android-Experte

    oder mal Code und Logcat posten
     
  8. pjanfred, 06.06.2012 #8
    pjanfred

    pjanfred Threadstarter Neuer Benutzer

    Der folgende Code funktioniert erstmal, jedoch möchte ich Ihn halt jetzt noch dazu bringen, das er in der Lage ist in der Funktion loginFailed() eine Fehlermeldung anzuzeigen.

    Code:
    package de.xyz_do.tb_app;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.app.ProgressDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    
    public class TbAppActivity extends Activity {
        private ProgressDialog waitDialog;
        
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            this.setTitle("Meine App");
    
        }
        
        public void onClickEinloggen(View v)  {
              // Zugangsdaten auslesen auslesen
            EditText benutzername = (EditText) findViewById(R.id.editTextBenutzername);
            EditText passwort = (EditText) findViewById(R.id.editTextPasswort);
    
            // Logindaten übermitteln
            LoginThread loginThread = new LoginThread(this,benutzername.getText().toString(),passwort.getText().toString());
            loginThread.start();
            
            // WaitDialog starten
            waitDialog = ProgressDialog.show(TbAppActivity.this, "", "Anmelden...", true);
            waitDialog.show();
        }
        
        public void loginSuccessful() {
            waitDialog.dismiss();
            System.out.println(">>>loginSuccessful");
        }
        
        public void loginFailed() {
            waitDialog.dismiss();
            System.out.println(">>>loginFailed");
        }    
    }
    
    class LoginThread extends Thread {
        private String benutzername;
        private String passwort;
        private TbAppActivity tbAppActivity;
        
        public LoginThread(TbAppActivity tbAppActivity, String benutzername,  String passwort) {
            this.benutzername = benutzername;
            this.passwort = passwort;
            this.tbAppActivity = tbAppActivity;
        }
        
        public void run() {
            // API initialisieren
            TcApi api = new TcApi();
            
            // Anfrage stellen
            if (api.doLogin(this.benutzername,  this.passwort)) {    
                this.tbAppActivity.loginSuccessful();        
            } else {
                this.tbAppActivity.loginFailed();
            }
            
        }
      
      }
    
    
     
  9. pjanfred, 08.06.2012 #9
    pjanfred

    pjanfred Threadstarter Neuer Benutzer

    Jedem der mal das gleiche Problem wie ich hat sei folgende Seite der Android Doku ans Herz gelegt:

    Processes and Threads | Android Developers

    Mit dem AsyncTask lässt sich mein vorhaben ohne weiteres realisieren.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Kostenpflichtige App für Beta-Test hochladen Android App Entwicklung 13.09.2017
[OFFEN] App startet nicht... Android App Entwicklung 10.09.2017
[OFFEN] Sind Notifications in einer Webview App möglich? Android App Entwicklung 10.09.2017
[OFFEN] Möchte eine App für Entrümpelungen entwickeln. Android App Entwicklung 08.09.2017
[ERLEDIGT] Alpha-Version meiner App nicht mit S8 kompatibel Android App Entwicklung 06.09.2017
[ERLEDIGT] Verbindung zu MS SQL DB von App aus möglich? Android App Entwicklung 05.09.2017
[OFFEN] App schließt nach Öffnen sofort Android App Entwicklung 04.09.2017
[ERLEDIGT] MIT APP Inventor paralleler Tastendruck Android App Entwicklung 23.08.2017
[GESCHLOSSEN] Random ListItem ausgeben funktioniert nicht mehr Android App Entwicklung 13.08.2017
[OFFEN] Bild per Intent an ListView übergeben und anzeigen Android App Entwicklung 13.08.2017
Du betrachtest das Thema "Anmeldevorgang visualisieren - ohne das die App stehen bleibt" im Forum "Android App Entwicklung",