Reputation: 116
I have checked this link and implemented the following but i am still getting error ProgressDialog : how to prevent Leaked Window
Here is my code
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
}
Here is my logcat:
08-10 10:36:19.500: E/WindowManager(835): Activity com.androidhive.xmlparsing.Detailsofproduct has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44f15250 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 com.android.internal.policy.impl.PhoneWindow$DecorView@44f15250 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)
Can anyone suggest where am doing something wrong??
Upvotes: 0
Views: 1096
Reputation: 176
ahm....
In my experience, ProgressDialog is created in Myclass.
If you create ProgressDialog in onreate and Myclass(extends AnsyncTask) get ProgressDialog from own constructor, it can throw error.
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
**/
....
use like this.
my code is successfully excuted.
Upvotes: 0
Reputation: 1372
I think this may be your solution
Firstly remove your constructor and Progress dialog instance create in the preExcecute methos like this
protected void onPreExecute() {
dialog=new ProgressDialog(Activity.this);
dialog.show();
super.onPreExecute();
}
Upvotes: 1