2012-05-08 23 views
5

tengo 3 clases y la clase llamada clase WebServiceCleint se extiende Asynctask y en doInBackgrnd() estoy pasando url y obtengo 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? ???diálogo de progreso con asynctask

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 i m es llamar de 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 conseguir 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 

Respuesta

11

contexto del paso de su actividad actual a AsyncTask clase y usando ese diálogo de progreso respecto indican 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 ..

+1

+1 Me gustaría ir con esta solución. –

+0

Señor, quiero llamarlo de varias actividades. Entonces, ¿es la manera correcta de llamar como WebServiceClient clientThread = new WebServiceClient (SelectOptionActivity.this); porque estoy recibiendo el error de nuevo – samir

+0

@ user370305 Sir publicó el error. Por favor ayuda – samir

2

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

+0

gracias amigo. fue realmente útil. lamentablemente solo tuve un poder de aceptación. – samir

+0

@samirsingh puedes votar las respuestas –

Cuestiones relacionadas