ProgressDialog在AsyncTask中无法正常工作

时间:2014-07-07 01:49:51

标签: android android-asynctask progressdialog

在尝试通过@ Slartibartfast的答案来表达How to show ProgressDialog across launching a new Activity?时,我试图让它在我的编辑器中运行失败。在这里,我试图在程序获取一些联系人信息时显示一个响铃进度。然后,在OnCreate中,它将它放在ListView中。我的问题是没有出现progressDialog。我的代码如下:

声明

private ProgressDialog ringProgressDialog = null;

AsyncTask - 设置并结束响铃progressDialog

private class load_contact_list extends AsyncTask<String, Void, Integer> {

    @Override
    protected Integer doInBackground(String... url) {

       ...
    }

    @Override
    protected void onPostExecute(Integer list_length) {
        ringProgressDialog.dismiss();
        setContentView(R.layout.activity_main);
    }
}

OnCreate中

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ringProgressDialog = ProgressDialog.show(MainActivity.this, "Loading contacts", "Please Wait", true);

    new load_contact_list().execute(...);
    }
  ...

我尽最大努力使我的代码像他一样已经证明了,我不知道为什么它不起作用。提前谢谢。

编辑: doInBackground()中的省略号集是获取联系人信息的位置。 OnCreate中的另一组是将信息放入列表的位置。

1 个答案:

答案 0 :(得分:2)

当您按照创建方式创建ProgressDialog时,问题就在于此问题。另外,最好在ProgressDialog类中的onPreExecute()方法中启动AsyncTask

1。为AsyncTask

创建一个构造函数

AsyncTask类创建构造函数,这样您就可以通过类实例化发送上下文引用,并在ProgressDialog类中声明AsyncTask

private class load_contact_list extends AsyncTask<String, Void, Integer> 
{
    private Activity mActivity;
    private Context mContext;
    private ProgressDialog mDialog;

    // Constructor
    public ProgressTask(Activity activity) 
    {
        this.mActivity= activity;
        mContext= activity;

        // Here we create a new instance of the ProgressDialog with the context   received as parameter
        mDialog= new ProgressDialog(mContext);
    }

    protected void onPreExecute() 
    {
        // We use the ProgressDialog object instantiated in this class's constructor
        this.mDialog.setMessage("Loading contacts");
        this.mDialog.show();
    }

    @Override
    protected Integer doInBackground(String... url) 
    {
        // ...
    }

    @Override
    protected void onPostExecute(Integer list_length) 
    {
        // Here we dismiss the ProgressDialog created in this class's constructor
        if(mDialog.isShowing())
        {
            this.mDialog.dismiss();
        }
        setContentView(R.layout.activity_main);
    }
}

2。执行AsyncTask也会发送活动的上下文

现在,在您的活动onCreate()方法中,您执行AsyncTask,并且不要忘记通过AsyncTask构造函数发送活动的上下文。< / p>

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    // Execute the AsyncTask class by sending the context by parameter via its constructor
    new load_contact_list(this).execute();
}

希望它对你有所帮助。