2012-08-10 62 views
0

我已经检查这个链接,并实施了以下,但我仍然得到错误 ProgressDialog : how to prevent Leaked Window进度对话框收到错误

这里是我的代码

public class MyClass extends AsyncTask<Void , Void , Void> 
{  

    private ProgressDialog progress; 
    public MyClass(ProgressDialog progress) 
    { 
     this.progress = progress; 
    } 
    public void onPreExecute() 
    { 

     progress.show(); 
    } 
    protected Void doInBackground(Void... params) { 
     try {    
      /** 
      * Create a new instance of the SAX parser 
      **/ 
      SAXParserFactory saxPF = SAXParserFactory.newInstance(); 
      SAXParser saxP = saxPF.newSAXParser(); 
      XMLReader xmlR = saxP.getXMLReader(); 
      URL url = new URL("http://zaggle.foostor.in/xml/get_product_by_id/"+((MyApplication) getApplicationContext()).categoryid); // URL of the XML   
      /** 
      * Create the Handler to handle each of the XML tags. 
      **/ 
      XMLHandlerforDetailsofproduct myXMLHandler = new XMLHandlerforDetailsofproduct(); 
      xmlR.setContentHandler(myXMLHandler); 
      xmlR.parse(new InputSource(url.openStream()));    
     } catch (Exception e) { 
      System.out.println(e); 
     } 
     data = XMLHandlerforDetailsofproduct.data; 
     for (int i = 0; i < data.getdenominationsvalue().size(); i++) { 

      denomvalue.add(data.getdenominationsvalue().get(i)); 
      denomid.add(data.getdenominationsid().get(i)); 
      disc.add(data.getdiscount().get(i)); 
      stock.add(data.getstock().get(i)); 

     }   



     return null;    
    } 

    public void onPostExecute(Void unused) 
    { 

     this.progress.dismiss(); 
     this.progress = null; 

    }  

} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.store_denomination); 
    spin1 = (Spinner)findViewById(R.id.spin); 
    ProgressDialog progress = new ProgressDialog(this); 
    progress.setMessage("Loading......"); 
    new MyClass(progress).execute(); 
      --------------------------------- 

and the code continues 
} 

这里是我的logcat:

08-10 10:36:19.500: E/WindowManager(835): Activity com.androidhive.xmlparsing.Detailsofproduct has leaked window [email protected] that was originally added here 
08-10 10:36:19.500: E/WindowManager(835): android.view.WindowLeaked: Activity com.androidhive.xmlparsing.Detailsofproduct has leaked window [email protected] that was originally added here 
08-10 10:36:19.500: E/WindowManager(835): at android.view.ViewRoot.<init>(ViewRoot.java:247) 
08-10 10:36:19.500: E/WindowManager(835): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
08-10 10:36:19.500: E/WindowManager(835): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
08-10 10:36:19.500: E/WindowManager(835): at android.view.Window$LocalWindowManager.addView(Window.java:424) 
08-10 10:36:19.500: E/WindowManager(835): at android.app.Dialog.show(Dialog.java:241) 
08-10 10:36:19.500: E/WindowManager(835): at com.androidhive.xmlparsing.Detailsofproduct$MyClass.onPreExecute(Detailsofproduct.java:75) 
08-10 10:36:19.500: E/WindowManager(835): at android.os.AsyncTask.execute(AsyncTask.java:391) 
08-10 10:36:19.500: E/WindowManager(835): at com.androidhive.xmlparsing.Detailsofproduct.onCreate(Detailsofproduct.java:127) 
08-10 10:36:19.500: E/WindowManager(835): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-10 10:36:19.500: E/WindowManager(835): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
08-10 10:36:19.500: E/WindowManager(835): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-10 10:36:19.500: E/WindowManager(835): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-10 10:36:19.500: E/WindowManager(835): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-10 10:36:19.500: E/WindowManager(835): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-10 10:36:19.500: E/WindowManager(835): at android.os.Looper.loop(Looper.java:123) 
08-10 10:36:19.500: E/WindowManager(835): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-10 10:36:19.500: E/WindowManager(835): at java.lang.reflect.Method.invokeNative(Native Method) 
08-10 10:36:19.500: E/WindowManager(835): at java.lang.reflect.Method.invoke(Method.java:521) 
08-10 10:36:19.500: E/WindowManager(835): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-10 10:36:19.500: E/WindowManager(835): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-10 10:36:19.500: E/WindowManager(835): at dalvik.system.NativeStart.main(Native Method) 

任何人都可以提出地方做错了什么?

回答

1

我想这可能是您的解决方案

首先删除你的构造和进度对话框实例在preExcecute methos创建这样

protected void onPreExecute() { 
       dialog=new ProgressDialog(Activity.this); 
       dialog.show(); 
       super.onPreExecute(); 
      } 
+0

@ user1411729如果答案解决那么你的问题接受它... :) – Newts 2012-08-10 06:36:01

+0

哦谢谢了很多它这仅是由于 – JavaGuy 2012-08-10 10:45:33

0

AHM ....

根据我的经验, ProgressDialog是在Myclass中创建的。

如果您在onreate创建ProgressDialog和MYCLASS(扩展AnsyncTask)从自己的构造得到ProgressDialog,它可以抛出错误。

public class MyClass extends AsyncTask { 
private ProgressDialog progress = new ProgressDialog(getparent()); 

/* public MyClass(ProgressDialog progress) 
{ 
    this.progress = progress; 
} */ 

public void onPreExecute() 
{ 

    progress.show(); 
} 
protected Void doInBackground(Void... params) { 
    try {    
     /** 
     * Create a new instance of the SAX parser 
     **/ 

....

使用这样的。

我的代码成功excuted。