2016-05-24 8 views
-1

In meiner Android-Anwendung dauert Dialog erscheint eine Weile. Zu dieser Zeit möchte ich den Fortschrittsdialog zeigen. Ich habe gelernt, dass der Fortschrittsdialog im Thread ausgeführt werden sollte, aber wenn ich einen Thread verwende, gibt es einen Fehler.Android Fortschrittsdialog, während auf den Dialog zu warten, erscheint

Ich erstellte Fortschrittsdialog in oncreate Methode und versuchte, in onclick Methode meiner Knopfes zu zeigen.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    context = getApplicationContext(); 

    mProgressDialog = new ProgressDialog(context, R.style.StyledDialog); 
    mProgressDialog.setCanceledOnTouchOutside(false); 
    Drawable drawable = context.getResources().getDrawable(R.drawable.progress_dialog); 
    mProgressDialog.setProgressDrawable(drawable); 
} 

folgende Code ist Onclick Methode ist meine Schaltfläche, die wie in XML-Datei definiert: android:onClick="refList"

public void refList(View v) { 


    Thread t = new Thread(new Runnable() { 
     @Override 
     public void run() { 

      mProgressDialog.show(); 

     } 
    }); 
    t.start(); 

    if(!refListDialog.isShowing()) { 
     refListDialog.show(); 
     t.interrupt(); 

    } 

} 

Dies ist die Ausnahme:

FATAL EXCEPTION: Thread-27305 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
     at android.os.Handler.<init>(Handler.java:121) 
     at android.view.ViewRootImpl$ViewRootHandler.<init>(ViewRootImpl.java:3052) 
     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:3321) 
     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:294) 
     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:226) 
     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:151) 
     at android.app.Dialog.show(Dialog.java:277) 
     at gcm.b4deploy.com.hesapozeti.MainActivity$2.run(MainActivity.java:196) 
     at java.lang.Thread.run(Thread.java:856) 

Ich bin wirklich stecken und warten Ideen. Danke im Voraus.

+1

Ich weiß nicht, wo Sie das gehört, aber Fortschritt Dialoge sollten nicht in einem Thread aufgerufen werden –

Antwort

0

ich wirklich nicht auf die Idee kommen, warum Sie die progressDialog in einem Thread setzen.

yourProgress = new ProgressDialog(this); 
yourProgress.setTitle("Title"); 
yourProgress.setMessage("wait for a while"); yourProgress.getProcess(); 
yourProgress.show(); 

Setzen Sie diesen Code zuerst in Ihrer Funktion in der onClick-Methode. Es wird sequentiell ausgeführt. Und Sie können eine bedingte Anweisung machen, und wenn Sie fertig sind, rufen Sie yourProgress.dismiss();

sample code - fügen Sie Ihre Aussage über den progressDialog.setTitle hinzu. Ich schlage vor, dass Sie den Fortschrittsdialog außerhalb dieser Methode deklarieren, so dass Sie diesen in der anderen Methode, die true zurückgibt, ablehnen können. Entfernen Sie einfach diese lauffähige Sache.

+0

Wenn ich das getan habe wie gesagt, gibt es einen Fehler: FATALE AUSNAHME: main java.lang.IllegalStateException: Methode konnte nicht für android ausgeführt werden: onClick unter android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener ... – Hilal

+0

If (Anweisung) {yourProgressDialog ... Dann Ihre Anweisung} else {} – RoCk

+0

Danke, das Problem ist, dass ich getApplicationContext() anstelle von MainActivity.this verwendet habe. Keine Notwendigkeit, Thread zu verwenden. – Hilal

0

Versuchen Sie, wie dieses

 runOnUiThread(new Runnable() { 
     public void run() { 
     mProgressDialog.show(); 
     } 
    }); 
+0

Immer noch Fehler: Fatale Ausnahme: Haupt java.lang.IllegalStateException: Konnte Methode für Android nicht ausführen: onClick at android.support.v7 .app.AppCompatViewInflater $ DeclaredOnClickListener .. – Hilal

Verwandte Themen