uso tutorial tiempo thread studio servicios segundo plano oncancelled example ejemplo ejecutar codigo cierto cada asynctask android android-asynctask progressdialog

tutorial - thread android studio ejemplo



diálogo de progreso con asynctask (2)

La instancia de Activity es nula porque está creando un objeto de WebServiceClient antes de la función oncreate. Mientras pasa Actividad o Contexto, asegúrese de que la Actividad haya creado de otra manera, se pasará nulo y obtendrá este error

tengo 3 clases y la clase llamada clase WebServiceCleint está extendiendo Asynctask y en doInBackgrnd() estoy pasando url y obteniendo datos del servicio web. pero llamo esto desde el método de otra clase llamado VerifyTeacherId. Ahora, ¿cómo puedo mostrar el diálogo de progreso? ¿Dónde debería escribir el pg.show y el pg.dismiss? ???

public class WebServiceClient extends AsyncTask<String, Void, String> { private static final String base_path = "http://www.gdaschools.in/"; protected static final String SLASH = "/"; private ProgressDialog dialog; private Activity activity; public WebServiceClient(Activity activity) { this.activity = activity; this.dialog = new ProgressDialog(activity); } @Override protected void onPreExecute() { this.dialog.setMessage("Progress start"); this.dialog.show(); } @Override protected String doInBackground(String... params) { StringBuffer sb = new StringBuffer(); sb.append(base_path); sb.append(params[0]); HttpRetriever retrieveResponse = new HttpRetriever(); retrieveResponse.retrieve(sb.toString()); return retrieveResponse.getResponseXml(); } @Override protected void onPostExecute(String result) { if (this.dialog.isShowing()) { this.dialog.dismiss(); } } }

Y el método donde estoy llamando es en otra clase llamada SelectOptionActivity . El método es

public void verifyTeacherId(View view) { teacherIdString = TeacherId.getText().toString().trim(); clientThread = new WebServiceClient(SelectOptionActivity.this); clientThread.execute("teacher/" + teacherIdString); try { String xml = clientThread.get(); DocumentBuilderFactory factory1 = DocumentBuilderFactory.newInstance(); factory1.setNamespaceAware(true); try { DocumentBuilder builder = factory1.newDocumentBuilder(); Document doc =builder.parse(new InputSource(new StringReader(xml))); Element root = doc.getDocumentElement(); if (doc != null) { NodeList nl = doc.getElementsByTagName("empId"); if (nl.getLength() > 0) { Node node = nl.item(0); responseTeacherId = node.getTextContent(); } NodeList n2=doc.getElementsByTagName("empName"); if (n2.getLength() > 0) { Node node = n2.item(0); responseTeacherName = node.getTextContent(); } } Toast.makeText(getBaseContext(),""+responseTeacherId,10).show(); } catch(Exception e) { e.printStackTrace(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); }

Ahora obteniendo un error como

05-08 12:10:10.834: D/AndroidRuntime(524): Shutting down VM 05-08 12:10:10.834: W/dalvikvm(524): threadid=1: thread exiting with uncaught exception (group=0x40014760) 05-08 12:10:10.872: E/AndroidRuntime(524): FATAL EXCEPTION: main 05-08 12:10:10.872: E/AndroidRuntime(524): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.GDAProj/com.GDAProj.SelectOptionActivity}: java.lang.NullPointerException 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1739) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.ActivityThread.access$500(ActivityThread.java:122) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.os.Handler.dispatchMessage(Handler.java:99) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.os.Looper.loop(Looper.java:132) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.ActivityThread.main(ActivityThread.java:4123) 05-08 12:10:10.872: E/AndroidRuntime(524): at java.lang.reflect.Method.invokeNative(Native Method) 05-08 12:10:10.872: E/AndroidRuntime(524): at java.lang.reflect.Method.invoke(Method.java:491) 05-08 12:10:10.872: E/AndroidRuntime(524): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 05-08 12:10:10.872: E/AndroidRuntime(524): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 05-08 12:10:10.872: E/AndroidRuntime(524): at dalvik.system.NativeStart.main(Native Method) 05-08 12:10:10.872: E/AndroidRuntime(524): Caused by: java.lang.NullPointerException 05-08 12:10:10.872: E/AndroidRuntime(524): at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:132) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:65) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:120) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.AlertDialog.<init>(AlertDialog.java:80) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.ProgressDialog.<init>(ProgressDialog.java:76) 05-08 12:10:10.872: E/AndroidRuntime(524): at com.GDAProj.WebServiceClient.<init>(WebServiceClient.java:20) 05-08 12:10:10.872: E/AndroidRuntime(524): at com.GDAProj.SelectOptionActivity.<init>(SelectOptionActivity.java:70) 05-08 12:10:10.872: E/AndroidRuntime(524): at java.lang.Class.newInstanceImpl(Native Method) 05-08 12:10:10.872: E/AndroidRuntime(524): at java.lang.Class.newInstance(Class.java:1301) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.Instrumentation.newActivity(Instrumentation.java:1022) 05-08 12:10:10.872: E/AndroidRuntime(524): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1730) 05-08 12:10:10.872: E/AndroidRuntime(524): ... 11 more


Pasar el contexto de su actividad actual a la clase AsyncTask y usar ese contexto mostrar el cuadro de diálogo de progreso en onPreExecute() y descartarlo onPostExecute()

public class WebServiceClient extends AsyncTask<String, Void, String> { private static final String base_path = "http://www.gdaschools.in"; protected static final String SLASH = "/"; private ProgressDialog dialog; private Activity activity; public WebServiceClient(Activity activity) { this.activity = activity; this.dialog = new ProgressDialog(activity); } @Override protected void onPreExecute() { this.dialog.setMessage("Progress start"); this.dialog.show(); } @Override protected void onPostExecute(final Boolean success) { if (this.dialog.isShowing()) { this.dialog.dismiss(); } . . .

El código es solo para su comprensión ..