如何解决错误"查看未附加到窗口管理器"在android?

时间:2015-03-01 03:31:06

标签: android android-asynctask progressdialog

在我的应用程序中,我在按钮单击时调用异步任务,并且我使用onpreexecute方法启动“进度对话框”并使用onpostexecute结束相同的操作。

我在实现上述操作时遇到此错误 - “视图未附加到窗口管理器。”

这是我的异步代码 -

/**
 * Async task class to get json by making HTTP call
 */
private class questionfeed_async extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Hi "+userName+ "! Loading your question feed ");
        pDialog.show();

    }


    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub


    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
       if (pDialog.isShowing()) {
           pDialog.dismiss();
       }
    }

我在SOF帖子中提出了一些解决方案。尝试它们但没有成功。

Logcat -

  
    

java.lang.IllegalArgumentException:视图未附加到窗口管理器处     android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:670)     在     android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:351)     在     android.view.WindowManagerImpl $ CompatModeWrapper.removeView(WindowManagerImpl.java:162)     在android.app.Dialog.dismissDialog(Dialog.java:319)处     android.app.Dialog.dismiss(Dialog.java:302)at     cheerz.fragment.Profile_Fragment $ user_detail_async.onPostExecute(Profile_Fragment.java:207)     在     cheerz.fragment.Profile_Fragment $ user_detail_async.onPostExecute(Profile_Fragment.java:149)     在android.os.AsyncTask.finish(AsyncTask.java:631)at     android.os.AsyncTask.access $ 600(AsyncTask.java:177)at     android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)     在android.os.Handler.dispatchMessage(Handler.java:99)at     android.os.Looper.loop(Looper.java:153)at     android.app.ActivityThread.main(ActivityThread.java:5034)at     java.lang.reflect.Method.invokeNative(Native Method)at     java.lang.reflect.Method.invoke(Method.java:511)at     com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:821)     在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)at     dalvik.system.NativeStart.main(原生方法)

  

1 个答案:

答案 0 :(得分:0)

使用此代码:

if (pDialog != null) {
       pDialog.dismiss();
   }

而不是:

if (pDialog.isShowing()) {
       pDialog.dismiss();
   }