2012-05-08 33 views
5

tôi có 3 lớp và lớp được gọi là lớp WebServiceCleint đang mở rộng Asynctask và trong doInBackgrnd() tôi chuyển url và i m nhận dữ liệu từ webservice. nhưng tôi đang gọi nó từ phương thức của lớp khác có tên là VerifyTeacherId. Bây giờ làm thế nào tôi có thể hiển thị hộp thoại tiến trình? nơi tôi nên viết pg.show và pg.dismiss. ???hộp thoại tiến trình với 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(); 
    } 
} 
} 

Và phương pháp mà tôi đang gọi là ở một lớp khác có tên SelectOptionActivity. Phương pháp này là

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(); 
    } 

Bây giờ nhận được lỗi như

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 

Trả lời

11

bối cảnh đèo hoạt động hiện tại của bạn để AsyncTask lớp và sử dụng rằng hộp thoại tiến bộ bối cảnh chương trình trong onPreExecute() và gạt bỏ nó 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(); 
     } 

. 
. 
. 

Mã chỉ dành cho sự hiểu biết của bạn ..

+1

+1 tôi sẽ đi với giải pháp này. –

+0

Thưa ông, tôi muốn gọi điều này từ nhiều hoạt động khác nhau. Vì vậy, nó là đúng cách để gọi như WebServiceClient clientThread = new WebServiceClient (SelectOptionActivity.this); vì tôi bị lỗi một lần nữa – samir

+0

@ user370305 Sir đã đăng lỗi. Plz giúp – samir

2

Ví dụ về Hoạt động là không vì bạn đang tạo đối tượng của WebServiceClient trước khi khởi tạo chức năng. Trong khi chuyển Hoạt động hoặc Ngữ cảnh, hãy chắc chắn rằng Hoạt động đã tạo ra thông minh khác nó không được thông qua và bạn sẽ gặp lỗi này

+0

cảm ơn bạn thân. thực sự hữu ích. thật đáng buồn là tôi chỉ có một sức mạnh chấp nhận. – samir

+0

@samirsingh bạn có thể bỏ phiếu cho câu trả lời –

Các vấn đề liên quan