5

In meiner Anwendung habe ich eine Listenansicht und jedes Element hat einen Knopf. Wenn der Benutzer auf die Schaltfläche klickt, möchte ich eine HTTP-Verbindung ausführen. Also verwende ich AsyncTask in der Adapterklasse. Jetzt wird das Problem Fortschrittsdialog nicht angezeigt.Android: ProgressDialog nicht in Adapter Klasse zeigt

private class MyClass extends AsyncTask<Void, Long, Boolean> { 
     private Context context; 
     private ServerCall call = new ServerCall(); 
     private ProgressDialog progressDialog1; 

     public MyClass(Context context) { 
      this.context = context; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      try { 
       progressDialog1 = ProgressDialog.show(context, "", 
         "Please wait...", true); 
       progressDialog1.setIndeterminate(true); 

      } catch (final Throwable th) { 

      } 

     } 

     @Override 
     protected void onProgressUpdate(Long... values) { 

      super.onProgressUpdate(values); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params) { 
      //some tasks 

      return true; 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      if (mode.equalsIgnoreCase("History")) { 

       Intent order = new Intent(context, ActicityA.class); 
       order.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(order); 

      } else { 
       Intent order = new Intent(context, ActivityB.class); 
       order.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       context.startActivity(order); 
      } 

     } 
    } 
+0

wurde onPreExcute() -Methode aufgerufen? Wir brauchen mehr Informationen. –

+0

@LazyNinja ja onPreExcute() aufgerufen. Ich sehe es in Lagcat – Sridhar

+0

Warum protokollieren Sie nicht die Ausnahme im catch-Block innerhalb der PreExecute-Methode. Wenn Sie dort eine Ausnahme erhalten, werden Sie wissen, was das Problem ist. – Sameer

Antwort

-1

Es ist wahr, dass ProgressDialog.show() Methode ein ProgressDialog Obect zurückkehrt, aber es ist besser, zuerst ein Objekt von ProgressDialog wie zu erstellen:

ProgressDialog progressDialog1 = new ProgressDialog(); 

und dann

progressDialog1 = ProgressDialog.show(context, "", 
         "Please wait...", true); 

Und auch versuchen, beenden die progressDialog1 in onPostExecute() durch seine dismiss() Methode aufrufen.

+0

Ich kann progressDialog1 = new ProgressDialog() nicht ausführen, da seine Syntax neu ProgressDialog (Kontext) ist. also stelle ich es in den Konstruktor. Aber trotzdem progressdialog nicht angezeigt – Sridhar

+0

Hier statt privaten ProgressDialog progressDialog1; benutze private ProgressDialog progressDialog1 = neuer ProgreassDialog (YourParentActivity.this); Und rufen Sie den progressDialog1 als this.progressDialog.show() auf; – Shrikant

+0

Ich benutze diese Adapterklasse für zwei Aktivitäten, so wie könnte ich – Sridhar

0

dieses Versuchen Sie stattdessen‘

protected void onPreExecute() { 
     dialog = new ProgressDialog(Activity.this); 
     dialog.setMessage("Please wait..."); 
     dialog.setIndeterminate(true); 
     //dialog.setCancelable(false); 
     dialog.show(); 
    } 
0
Follow this steps 
    [0] start showing progressbar 
    [1] Execute AsyncTask class 
    [2] in this class one interface for post the response in main class 
    [3] Declare one interface class 
    [4] get Reponse in Main Clss using interface 
    [5] dismiss Progressbar and Bind your Data 

    ex. 
    [0] 

      progr.setVisibility(View.VISIBLE); 
    [1] 
        MyTask task = new MyTask(); 
       task.setdata(new SendData() { 
    [4]    @Override 
        public void GetStringResponse(String str) { 
         Log.i(General.TAG, TAG + " Overide GetString-"+str);      
         final String GetResponse=str; 
        // here you get response and parse it 
    [5]        // here you can dismiss your progress bar       
        } 
       }); 
       task.execute(new String[] {Newsurl[Id]}); 


    [2] Add interface here with Method 

    SendData objsend; 

    @Override 
     protected void onPostExecute(String Result) 
     { 
      Log.i("**********", Result);   
      objsend.GetStringResponse(Result); 
     } 

     public void setdata(SendData sendd) 
     { 
      Log.i(General.TAG,TAG+"Initialise Interface object"); 
      objsend = sendd; 
     } 

[3] interface class 
    public interface SendData {  
    public abstract void GetStringResponse(String str); 
} 
+0

Ich platziere AsyncTask in einer Adapterklasse, und diese Adapterklasse ist Standalone – Sridhar

+0

k habe deinen Punkt –

0
<pre><code> 
public MyClass(Context context) { 
     this.context = context; 
     progressDialog1=new ProgressDialog(context); 
    } 

@Override protected void OnPreExecute() {

progressdialog1.setMessage("please wait while loading"); 
    progressdialog1.setIndeterminate(true); 

    }