Anmeldevorgang visualisieren - ohne das die App stehen bleibt

P

pjanfred

Neues Mitglied
0
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
 
du darfst deine UI nicht im thread verändern
 
okay, aber deshalb nutze ich ja eine synchronized Funktion. Hast du den eine andere Idee wie ich mein Vorhaben realisieren könnte?
 
was hat eine synchronized methode damit zu tun ?

nochmal nachlesen was genau synchronized bedeutet
 
okay, stimmt garnichts. Aber wie bekomme ich meine Idee nun realisiert?
 
du musst wieder in den UI thread kommen.

geschickt ist, wenn du dir mal den asynctask ansiehst

ansonsten gibts noch handler oder runonUIthread()
 
oder mal Code und Logcat posten
 
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();
        }
        
    }
  
  }
 
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.
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
R
  • Robby1950
2
Antworten
23
Aufrufe
1.015
Robby1950
R
netfreak
  • netfreak
Antworten
10
Aufrufe
457
netfreak
netfreak
Zurück
Oben Unten