0

私はこのリンクをチェックし、以下を実装しましたが、まだエラー ProgressDialog が発生しています: リークされたウィンドウを防ぐ方法

これが私のコードです

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 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)

誰かがどこで何か間違っているかを提案できますか??

4

2 に答える 2

1

これがあなたの解決策かもしれないと思います

最初にコンストラクタを削除し、進行状況ダイアログ インスタンスをこのように preExcecute メソッドで作成します

protected void onPreExecute() {
                dialog=new ProgressDialog(Activity.this);
                dialog.show();
                super.onPreExecute();
            }
于 2012-08-10T05:21:46.980 に答える
0

うーん....

私の経験では、ProgressDialog は Myclass で作成されます。

onreate で ProgressDialog を作成し、Myclass(extends 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
         **/

....

このように使います。

私のコードは正常に実行されました。

于 2012-08-10T05:31:29.443 に答える