简体   繁体   English

片段上无法执行ProgressDialog.show()

[英]Can't do ProgressDialog.show() on a Fragment

I'm developing an Android application and I have this AsynTask in a Fragment : 我正在开发一个Android应用程序,我在Fragment有这个AsynTask

private class SendUserDatasAsynTask extends AsyncTask<User, Void, String>
{
    private Context mContext;
    private ProgressDialog loadingDialog;

    SendUserDatasAsynTask(Context context)
    {
        this.mContext = context;
    }

    @Override
    protected void onPreExecute()
    {
        loadingDialog = new ProgressDialog(mContext);
        loadingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        loadingDialog.setMessage(getString(R.string.dialog_message_sending_user_data));
        loadingDialog.setCancelable(false);
        loadingDialog.show();

        super.onPreExecute();
    }
    @Override
    protected String doInBackground(User... users)
    {   
        return SpringController.sendUserPersonalData(users[0]);
    }

    protected void onPostExecute(String result)
    {
        loadingDialog.dismiss();
        Toast.makeText(MSDApplication.getAppContext(), result, Toast.LENGTH_LONG).show();
    }
}

But when I execute the task I get this error: 但是当我execute任务时,我收到此错误:

06-21 13:52:42.559: E/AndroidRuntime(513): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:509)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:241)
at com.mycompany.mxt.fragments.UserProfileFragment$SendUserDatasAsynTask.onPreExecute(UserProfileFragment.java:635)
at android.os.AsyncTask.execute(AsyncTask.java:391)
at com.mycompany.mxt.fragments.UserProfileFragment.sendDataToWebService(UserProfileFragment.java:588)
at com.mycompany.mxt.fragments.UserProfileFragment.onAcceptUserProfileClick(UserProfileFragment.java:477)

Do you know what is happening? 你知道发生了什么吗?

Your problem might be the context you use in SendUserDatasAsynTask(Context context) . 您的问题可能是您在SendUserDatasAsynTask(Context context)使用的SendUserDatasAsynTask(Context context)
Make sure you pass your Activity as context and not the ApplicationContext . 确保将Activity作为上下文而不是ApplicationContext传递。

So inside your fragment change your asynctask's initialization to 因此,在您的片段内部将asynctask的初始化更改为
SendUserDatasAsynTask myTask = new SendUserDatasAsynTask(getActivity()) ; SendUserDatasAsynTask myTask = new SendUserDatasAsynTask(getActivity()) ;

Try using the following: 尝试使用以下内容:

Dialog.show(getFragmentManager(), "TAG");

This works when calling from the main activity, not sure about an AsyncTask. 从主活动调用时,这不起作用,不确定AsyncTask。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM