gpt4 book ai didi

java - 使用对话框等待 AsyncTask

转载 作者:行者123 更新时间:2023-12-01 14:10:02 26 4
gpt4 key购买 nike

我的 AsyncTask 遇到问题。

我通过调用 webService 来更新对象列表。在这段时间里,我想显示一个ProgressDialog。然后,当列表完全更新时,我希望关闭对话框和 AsyncTask。

问题是 UIThread 不等待 AsyncTask 完成。我发现 get() 方法可以为我工作,但是使用它,UIThread 只是被阻止,并且对话框只是不显示。

我想知道如何在显示 ProgressDialog 的同时等待任务完成。

这是我的 AsyncTask 类:

public class MyAsyncTask extends AsyncTask<Integer, Void, Boolean>{

private ProgressDialog pd;

private String m_sShelfCode;
private String m_sFamiliyCode;

public MyAsyncTask(String shelfCode, String familyCode) {
this.m_sShelfCode = shelfCode;
this.m_sFamiliyCode = familyCode;
}

@Override
protected void onPreExecute() {
AppManager app = AppManager.getInstance();
LayoutInflater inflater = (LayoutInflater)app.m_AppContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout rl = (RelativeLayout)inflater.inflate(R.layout.progress_dialog, null, false);
pd = new ProgressDialog(app.m_AppContext);
pd.requestWindowFeature(Window.FEATURE_NO_TITLE);
pd.setCancelable(false);
pd.show();
pd.setContentView(rl);
}

@Override
protected Boolean doInBackground(Integer... params) {
Log.d("DO IN BACKGROUND","param[0]="+params[0]);
switch (params[0]) {
case AppManager.SHELF_LIST:
//Calling WebService
SoapShelf s = new SoapShelf();
try {
ArticleListFragment.m_ShelfList = s.getShelfList();
} catch (IOException e) {
e.printStackTrace();
return false;
} catch (XmlPullParserException e) {
e.printStackTrace();
return false;
}
break;
case AppManager.FAMILY_LIST:
// set family list
break;
case AppManager.ARTICLE_LIST:
// set article list
break;
}
return true;
}

@Override
protected void onPostExecute(Boolean result) {
pd.dismiss();
if (result == false)
;// error dialog
}
}

我在此处的 ArticleListFragment 中称之为

public void getItemList(int listType) {
switch (listType) {
case AppManager.SHELF_LIST:
new MyAsyncTask(null, null).execute(new Integer[]{AppManager.SHELF_LIST});

提前致谢

最佳答案

尝试:

@Override
protected void onPreExecute() {
pd = ProgressDialog.show(context, "title", "message");
}

@Override
protected void onPostExecute(Boolean result) {
if (pd != null && pd.isShowing())
pd.dismiss();
}

关于java - 使用对话框等待 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18593853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com