1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Android ProgressDialog

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Trancegott, 12.02.2012.

  1. Trancegott, 12.02.2012 #1
    Trancegott

    Trancegott Threadstarter Neuer Benutzer

    Beiträge:
    17
    Erhaltene Danke:
    0
    Registriert seit:
    12.02.2012
    Hallo,
    ich bin völlig neu in der Android Programmierung und bitte deswegen um verständniss.
    Kann mir jemand erklären, oder vielleicht einen link posten wo es gut erklärt wird, warum ein ProgressDialog unter Umständen nicht sofort angezeigt wird? ich habe schon andere Posts gelesen, aber ehrlichgesagt verstehe ich von UI-Thread und Async Task herzlich wenig :(

    Wäre nett, wenn mir jemand helfen kann.
     
    Zuletzt bearbeitet: 12.02.2012
  2. v Ralle v, 12.02.2012 #2
    v Ralle v

    v Ralle v Android-Lexikon

    Beiträge:
    913
    Erhaltene Danke:
    199
    Registriert seit:
    27.08.2010
    Kennst du dich mit Multithreading und Java allgemein aus?
     
  3. Trancegott, 12.02.2012 #3
    Trancegott

    Trancegott Threadstarter Neuer Benutzer

    Beiträge:
    17
    Erhaltene Danke:
    0
    Registriert seit:
    12.02.2012
    Multithreading kenne ich nicht....

    Falls es jemandem etwas bringt:
    Code:
    	public void onBackPressed() 
    	{
    		ProgressDialog dialog = ProgressDialog.show(AppActivity.this, "", "This could take a while...", true);
    		dialog.show();
    		write();
    		dialog.dismiss();
    	   return;
    	}
    
     
  4. v Ralle v, 12.02.2012 #4
    v Ralle v

    v Ralle v Android-Lexikon

    Beiträge:
    913
    Erhaltene Danke:
    199
    Registriert seit:
    27.08.2010
    Trancegott bedankt sich.
  5. swordi, 12.02.2012 #5
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    den code sollte aber keiner übernehmen. wenn deine write methode länger braucht, wirds nen schönen anr geben.
     
  6. DieGoldeneMitte, 12.02.2012 #6
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Und wenn der write schnell ist, ist der Dialog weg, bevor man ihn wahrgenommen hat.
     
  7. Trancegott, 12.02.2012 #7
    Trancegott

    Trancegott Threadstarter Neuer Benutzer

    Beiträge:
    17
    Erhaltene Danke:
    0
    Registriert seit:
    12.02.2012
    okay, jetzt weiß ich grob was threads sind...

    Undi ich hab jetz auch verstanden was bei mir immer falsch lief und jetzt funktionierts :)

    Code:
    @Override
    	public void onBackPressed() 
    	{
    		ProgressDialog dialog = ProgressDialog.show(BitchAppActivity.this, "Uploading...", "This could take a while", true);
    		ArbeitsThread ladeThread = new ArbeitsThread(this, dialog);
    		ladeThread.start();
    	    return;
    	}
    	public class ArbeitsThread extends Thread
    	{
    		private ProgressDialog meinFortschritt;
    		
    		public ArbeitsThread(Activity activity, ProgressDialog fortschritt)
    		{
    			super();
    			meinFortschritt = fortschritt;
    		}
    
    		@Override
    		public void run() 
    		{
    			write();
    			meinFortschritt.dismiss();
    			finish();
    		}
    	}
    
     
  8. Trancegott, 12.02.2012 #8
    Trancegott

    Trancegott Threadstarter Neuer Benutzer

    Beiträge:
    17
    Erhaltene Danke:
    0
    Registriert seit:
    12.02.2012
    @DieGoldeneMitte
    Ist der Code so, wie ich ihn jetzt gepostet habe anr-resistent?^^
     
  9. DieGoldeneMitte, 12.02.2012 #9
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Der Code ist zwar ANR sicher, aber du machst ein GUI update von außerhalb des Haupt-Threads. (Das ist unter Android nicht richtig)

    Unter Android nimmt man statt eines Threads einen AsyncTask (Tutorial hier: Android Threads, Handlers and AsyncTask - Tutorial). Der UI Update, sprich der dialog.dismiss() kommt dann in die onPostExecute(). So kannst du dann nebenbei auch sicher sein, dass bei einer Exception im write der Dialog auch verschwindet etc...
     
    Trancegott bedankt sich.
  10. Trancegott, 12.02.2012 #10
    Trancegott

    Trancegott Threadstarter Neuer Benutzer

    Beiträge:
    17
    Erhaltene Danke:
    0
    Registriert seit:
    12.02.2012
    ah okay, danke!
    Dann würde ich jetzt nur noch gerne wissen, wie ich den fehler abfragen kann, dass keine Verbindung hergestellt werden konnte oder ein Timeout erfolg...
     
  11. DieGoldeneMitte, 12.02.2012 #11
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Das kann man zB, indem man diesen Fehler im doInBackground abfängt, auswertet und entsprechende Werte an onPostExecute (ob per Parameter oder Instanzvariable bleibt dir überlassen) übergibt, in denen man dann die passende Meldung raushaut.
     

Diese Seite empfehlen