首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ProgressDialog中运行AsyncTask

如何在ProgressDialog中运行AsyncTask
EN

Stack Overflow用户
提问于 2015-10-25 03:42:53
回答 1查看 43关注 0票数 1

在我的活动的ProgressDialog中初始化AsyncTask有困难,java文件活动的名称是BigBoard.java

下面是AsyncTask的java类代码,它位于BigBoard.java内部:

代码语言:javascript
复制
    class syncX extends AsyncTask<String, String, String>
{
    ProgressDialog progress;

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
        progress = new ProgressDialog(context); //ERROR
        progress.setMessage("Setting BigBoard ");
        progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progress.setIndeterminate(true);
        progress.show();
    }

    @Override
    protected String doInBackground(String... params)
    {
        return null;

    }

    @Override
    protected void onPostExecute(String file_url)
    {

    }

}

现在,这就是我遇到麻烦的地方,progress = new ProgressDialog(context);。我试着把它改成:

代码语言:javascript
复制
progress = new ProgressDialog(this);
progress = new ProgressDialog(BigBoard);
progress = new ProgressDialog(BigBoard.this);

但是,无助。怎么修呢?

EDIT1

BigBoard类按请求在下面提供。

代码语言:javascript
复制
public class BigBoard extends ActionBarActivity {

ArrayList<String> countryLocal;
String temp;
ArrayAdapter<String> namesArrayAdapter;
ContactInfo ci;
List<ContactInfo> result;
ProgressDialog progress;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Parse.initialize(this, "app-id", "client-key");
    setContentView(R.layout.activity_big_board);
    ci = new ContactInfo();


    RecyclerView recList = (RecyclerView) findViewById(R.id.cardList);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    llm.setOrientation(LinearLayoutManager.VERTICAL);
    recList.setLayoutManager(llm);
    String abc="hello";

    syncX runner = new syncX();
    runner.execute();




    result = new ArrayList<ContactInfo>();
    ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Credentials");
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> credentialList, ParseException e) {
            if (e == null) {
                for(int i=0;i<credentialList.size();i++)
                {
                    ci.name  = credentialList.get(i).getString("Name");
                    ci.surname = credentialList.get(i).getString("SurName");
                    ci.email = credentialList.get(i).getString("email");
                    result.add(ci);


                    Log.d("OUT", "So the Val::------> " + credentialList.get(i).getString("email"));
                    //result.notifyDataSetChanged();

                }
            } else {
                Log.d("score", "Error: " + e.getMessage());
            }
        }
    });

    ContactAdapter ca = new ContactAdapter(result);
    recList.setAdapter(ca);


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-25 03:55:03

进度对话框需要传递活动的上下文。就像你想要的那样。

代码语言:javascript
复制
progress = new ProgressDialog(context);

现在的问题是如何将上下文传递给进度对话框。只是这门课的召唤。class syncX extends AsyncTask<String, String, String>{}应该将上下文传递给进度对话框。请参阅下面的修改版本类。

代码语言:javascript
复制
class syncX extends AsyncTask<String, String, String>
{
        ProgressDialog progress;
        Context mContext;

        public syncX(Context context){
          this.mContext= context;
        }

         public Context getContext(){
           return mContext;
         }


        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
            progress = new ProgressDialog(getContext());
            progress.setMessage("Setting BigBoard ");
            progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progress.setIndeterminate(true);
            progress.show();
        }

        @Override
        protected String doInBackground(String... params)
        {
            return null;
        }

        @Override
        protected void onPostExecute(String file_url)
        {

        }    
}

在您的BigBoard类中,应该是这样的。

代码语言:javascript
复制
new syncX(this).execute();

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33325957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档