Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android:App最终在Post Execute的Async Task中崩溃大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我从Web服务器获取数据.我使用异步任务来获取数据.但是,问题有时我的应用程序在progressDialog.dismiss()上的onPostExecute崩溃.但是,每次都不会发生这种情况.这是我的代码

异步任务

public class GetFeaturedStoreListAsyncTask extends AsyncTask<Void,Void,String>
{
Context ctx;
ProgressDialog pd;
ListView listFeaturedStore;
String dataUrl;
public static final String TAG = "GetFeaturedStoreAsyncTask";
public static ArrayList<StoreDescriptionDAO> featuredDAOList;

public GetFeaturedStoreListAsyncTask(String dataUrl,Context ctx,ListView listFeaturedStorE) 
{
    this.dataUrl = dataUrl;
    this.ctx = ctx;
    this.listFeaturedStore = listFeaturedStore;
}//Constructor

@Override
protected void onPreExecute() 
{
    pd = new ProgressDialog(ctX);
    pd.setmessage(ctx.getresources().getString(R.String.please_wait));
    pd.show();
}//onPreExecute

@Override
protected String doInBACkg@R_675_7060@Void... params) 
{   
    Log.v(tag,"doInBACkground called");
    JSONParser jsonParser = new JSONParser();
    String serverResponse = jsonParser.getJsonString(dataUrl);
    return serverResponse;
}//doInBACkground

@Override
protected void onPostExecute(String responsE) 
{
    Featuredlistadapter mFeaturedlistadapter = null;
    mFeaturedlistadapter = getFeaturedlistadapter(responsE);

    if(mFeaturedlistadapter != null)
    {
        Log.v(tag,"adapter not null");
        listFeaturedStore.setAdapter(mFeaturedlistadapter);
        listFeaturedStore.setLayoutAnimation(AnimationUtility.fastCascadeListViewAnimation());
        pd.dismiss();
    }//if
    else
    {
        Log.v(tag,"adapter null");
        pd.dismiss();
        SeattleNightLifeUtility.openUtilityDialog(ctx,ctx.getresources().getString(R.String.network_error_msg));
    }//else
}//onPostExecute

private Featuredlistadapter getFeaturedlistadapter(String jString) 
{
    Featuredlistadapter mFeaturedAdapter = null;
    featuredDAOList = 
            ParsedFeaturedStoreDescData.getFeaturedStoreDesc(jString);
    if(featuredDAOList != null 
            && featuredDAOList.size() > 0)
    {
        mFeaturedAdapter = new Featuredlistadapter(ctx,featuredDAOList);
        Log.v(tag,"arraylist size > 0");
        return mFeaturedAdapter;
    }//if
    else
    {
        return null;
    }//else
}//getFeaturedlistadapter
}//GetCityStoreAsyncTask

这是我的logcat:

Activity com.dzo.seattlesnightlife.FeaturedActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4a715c38 that was originally added here
02-02 15:23:45.426: E/WindowManager(12627): android.view.WindowLeaked: Activity com.dzo.seattlesnightlife.FeaturedActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4a715c38 that was originally added here
02-02 15:23:45.426: E/WindowManager(12627):     at android.view.ViewRoot.<init>(ViewRoot.java:247)
02-02 15:23:45.426: E/WindowManager(12627):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
02-02 15:23:45.426: E/WindowManager(12627):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
02-02 15:23:45.426: E/WindowManager(12627):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
02-02 15:23:45.426: E/WindowManager(12627):     at android.app.Dialog.show(Dialog.java:241)
02-02 15:23:45.426: E/WindowManager(12627):     at com.dzo.seattlesnightlife.asynctask.GetFeaturedStoreListAsyncTask.onPreExecute(GetFeaturedStoreListAsyncTask.java:40)
02-02 15:23:45.426: E/WindowManager(12627):     at android.os.AsyncTask.execute(AsyncTask.java:391)
02-02 15:23:45.426: E/WindowManager(12627):     at com.dzo.seattlesnightlife.FeaturedActivity$@R_447_6674@rTask$1.run(FeaturedActivity.java:173)
02-02 15:23:45.426: E/WindowManager(12627):     at android.os.Handler.handleCallBACk(Handler.java:587)
02-02 15:23:45.426: E/WindowManager(12627):     at android.os.Handler.dispatchmessage(Handler.java:92)
02-02 15:23:45.426: E/WindowManager(12627):     at android.os.Looper.loop(Looper.java:123)
02-02 15:23:45.426: E/WindowManager(12627):     at android.app.ActivityThread.main(ActivityThread.java:4633)
02-02 15:23:45.426: E/WindowManager(12627):     at java.lang.reflect.Method.invokeNative(Native Method)
02-02 15:23:45.426: E/WindowManager(12627):     at java.lang.reflect.Method.invoke(Method.java:521)
02-02 15:23:45.426: E/WindowManager(12627):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
02-02 15:23:45.426: E/WindowManager(12627):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-02 15:23:45.426: E/WindowManager(12627):     at dalvik.system.NativeStart.main(Native Method)
02-02 15:23:45.456: V/GetFeaturedStoreAsyncTask(12627): arraylist size > 0
02-02 15:23:45.456: V/GetFeaturedStoreAsyncTask(12627): adapter not null
02-02 15:23:45.526: W/dalvikvm(12627): threadid=1: thread exiTing with uncaught exception (group=0x400207d8)
02-02 15:23:45.536: E/AndroidRuntime(12627): FATAL EXCEPTION: main
02-02 15:23:45.536: E/AndroidRuntime(12627): java.lang.IllegalArgumentexception: View not attached to window manager
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.view.Window$LocalWindowManager.removeView(Window.java:432)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.app.Dialog.dismissDialog(Dialog.java:278)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at  android.app.Dialog.access$000(Dialog.java:71)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.app.Dialog$1.run(Dialog.java:111)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.app.Dialog.dismiss(Dialog.java:268)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at com.dzo.seattlesnightlife.asynctask.GetFeaturedStoreListAsyncTask.onPostExecute(GetFeaturedStoreListAsyncTask.java:63)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at com.dzo.seattlesnightlife.asynctask.GetFeaturedStoreListAsyncTask.onPostExecute(GetFeaturedStoreListAsyncTask.java:1)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.os.AsyncTask.finish(AsyncTask.java:417)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.os.AsyncTask.access$300(AsyncTask.java:127)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.os.AsyncTask$InternalHandler.handlemessage(AsyncTask.java:429)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.os.Handler.dispatchmessage(Handler.java:99)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.os.Looper.loop(Looper.java:123)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at android.app.ActivityThread.main(ActivityThread.java:4633)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at java.lang.reflect.Method.invokeNative(Native Method)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at java.lang.reflect.Method.invoke(Method.java:521)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-02 15:23:45.536: E/AndroidRuntime(12627):    at dalvik.system.NativeStart.main(Native Method)
02-02 15:23:45.556: W/Activitymanager(180):   Force finishing activity com.dzo.seattlesnightlife/.FeaturedActivity

解决方法

@H_301_24@ 在退出活动后尝试显示ProgressDialog时会出现此问题.

我刚刚解决了这个问题尝试这种方式:

if ((this.mDialog != null) && this.mDialog.isShowing()) {
    this.mDialog.dismiss();
    this.mDialog = null;
 }

在您重写的onDestroy()或onStop()方法中.

编辑:您可以创建接口,将其传递给AsyncTask(在构造函数中),然后在onPostExecute中调用方法.

例如:

你的界面:

public interface OnTaskCompleted {
    void onTaskCompleted();
}

你的活动:

public YourActivity implements OnTaskCompleted {
    //your Activity
}

你的AsyncTask:

public YourTask extends AsyncTask<Object,Object,Object> { //change Object to required type
    private OnTaskCompleted listener;

    public YourTask(OnTaskCompleted listener) {
        this.listener=listener;
    }

//required methods

    protected void onPostExecute(Object o) {
        //your stuff
        listener.onTaskCompleted();
    }
}

大佬总结

以上是大佬教程为你收集整理的Android:App最终在Post Execute的Async Task中崩溃全部内容,希望文章能够帮你解决Android:App最终在Post Execute的Async Task中崩溃所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。