AsyncTask clase externa con ProgressDialog

** Actualizado: (Vea abajo) ** He estado buscando alrededor durante un par de días y no puedo encontrar una respuesta directa a esto. Algunos dicen que es posible que algunos dicen que para lograr algunos dicen que no lo es. Me estoy volviendo loco por esto.

Lo que quiero es que el AsyncTaskTask muestre una barra de progreso en una clase externa. Para hacer esto estoy pasando el contexto como se puede ver en la clase principal. Pero lo que intento consigo NullPointerException .

Se aprecian ejemplos de código de trabajo. Gracias

Usando Android 2.2 por cierto.

principal:

 import android.app.Activity; import android.os.Bundle; public class AsyncDemo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new AsyncClass(this).execute(); } } 

AsyncClass.java

 import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.os.SystemClock; public class AsyncClass extends AsyncTask<Void, String, Void> { private Context context; ProgressDialog dialog = new ProgressDialog(context); public AsyncClass(Context cxt) { context = cxt; } @Override protected void onPreExecute() { dialog.setTitle("Please wait"); dialog.show(); } @Override protected Void doInBackground(Void... unused) { SystemClock.sleep(2000); return (null); } @Override protected void onPostExecute(Void unused) { dialog.dismiss(); } } 

Actualización: Tengo una pregunta de seguimiento: ¿Utilizando el código anterior, es posible devolver un valor del método onPostExecute a la clase principal, de alguna manera? (Lo siento por ser noobish beeing) He intentado algo como esto:

 String result = new AsyncClass(this).execute(); 

y luego un método que devuelve una cadena. Pero no puedo hacer eso porque tengo:

 Type mismatch: cannot convert from AsyncTask<String,Void,Void> to String 

¿Qué puedo hacer para solucionar este problema? Gracias.

Estaba creando el ProgressDialog con un contexto nulo. El siguiente código funcionó para mí.

 public class AsyncClass extends AsyncTask<Void, String, Void> { private Context context; ProgressDialog dialog; public AsyncClass(Context cxt) { context = cxt; dialog = new ProgressDialog(context); } @Override protected void onPreExecute() { dialog.setTitle("Please wait"); dialog.show(); } @Override protected Void doInBackground(Void... unused) { SystemClock.sleep(2000); return (null); } @Override protected void onPostExecute(Void unused) { dialog.dismiss(); } } 

ok esto es lo que hice cuando estaba usando fragmentos. Así es como se llama a la AsyncTask dentro de un fragmento:

 String result=new AsyncClass(getActivity()).execute(); 

y así es como se ve mi clase externa AsyncTask:

 public class AsyncClass extends AsyncTask<Void, Void, String> { ProgressDialog pdialog; public AsyncClass(Context context) { pdialog = new ProgressDialog(context); } @Override protected void onPreExecute() { pdialog.setIndeterminate(true); pdialog.setCancelable(false); pdialog.setTitle("Loading Feed.."); pdialog.setMessage("Please wait.");pdialog.show(); } @Override protected String doInBackground(Void... params) { String result=null; //do your task here and generate result String return result; } @Override protected void onPostExecute(String result) { if(pdialog.isShowing()) pdialog.dismiss(); } } 

@ Gracias SSZero gran respuesta, ayudó mucho.

Me gustaría responder a esta pregunta de seguimiento, es decir

Tengo una pregunta de seguimiento: ¿Utilizando el código anterior, es posible devolver un valor del método onPostExecute a la clase principal, de alguna manera? (Lo siento por ser noobish beeing) He intentado algo como esto:

String result = new AsyncClass(this).execute();

Hice esto en mi código funcionó.

 AsyncClass ac=new AsyncClass(); ac.execute(""); String rslt=ac.get(); 

Llame a este código donde quiera.

 public class AsynchClass extends AsyncTask <String,Integer,String> { public String result=null; @Override protected void onPreExecute() { // TODO Auto-generated method stub } protected String doInBackground(String... params) { // Do all your background task here return result; } @Override protected void onProgressUpdate(Integer... values) { } protected void onPostExecute(String result) { } } 
  • Despido de ProgressDialog en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.