首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android对话框和异步任务

Android对话框和异步任务
EN

Stack Overflow用户
提问于 2013-08-10 11:58:20
回答 1查看 685关注 0票数 0

我正在尝试创建一个进度对话框,在加载时弹出。我已经知道了如何使对话框出现和消失,并且可以更改对话框中的内容,但我有多个异步任务,希望对话框在第一个异步任务启动时出现,然后在最后一个异步任务结束时消失。

对话框是否有一种方法可以知道给定活动何时完成了所有异步任务?我在如何处理这个问题上有问题。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-10 12:33:03

这里有一个精确的示例代码,我用它来实现相同的功能。

代码语言:javascript
运行
复制
public class LoginActivity extends Activity 
{
    public static String TAG = "Login_Activity: ";

    private EditText usernameEditText;
    private EditText passwordEditText;

    private ProgressDialog progress_dialog;

    private int taskCount = 0;

    private void updateTaskCount(int value)
    {
        taskCount += value;

        if(progress_dialog != null && taskCount == 0)
        {
            progress_dialog.dismiss();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        usernameEditText = (EditText) findViewById(R.id.login_username);
        passwordEditText = (EditText) findViewById(R.id.login_password);

        progress_dialog = new ProgressDialog(this);
    }

    public void LoginClick(View view)
    {       
        String URL = "http://SOME.com/api/Members?Username=" +                        
                      usernameEditText.getText().toString()+ "&Password=" +  
                      passwordEditText.getText().toString();

         progress_dialog.setMessage("Authenticating. Please wait...");
         progress_dialog.setCancelable(false);
         progress_dialog.show();

         new AuthenticateUserFromServer().execute(URL);
         updateTaskCount(1);

         new NotifyWebService ().execute("some other url");
         updateTaskCount(1);    
    }

    protected void onDestroy()
    {
        progress_dialog.dismiss();
        super.onDestroy();
    }

    @Override
    protected void onPause()
    {
        progress_dialog.dismiss();
        super.onPause();
    }

    private class AuthenticateUserFromServer extends AsyncTask <String, Void, String> 
    {
        protected String doInBackground(String... urls)
        {
            return Utility.readJSONFromWebService(urls[0]);
        }

        protected void onPostExecute(String result) 
        {   
            // do other stuff 
            updateTaskCount(-1);
        }
    }

    private class NotifyWebService extends AsyncTask <String, Void, String> 
    {
        protected String doInBackground(String... urls)
        {
            return Utility.readJSONFromWebService(urls[0]);
        }

        protected void onPostExecute(String result) 
        {   
            // do other stuff 
            updateTaskCount(-1);
        }
    }
}

如果异步任务有多个/单独的类,则可以创建一个静态实用程序类来跟踪和更新计数。

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

https://stackoverflow.com/questions/18161630

复制
相关文章

相似问题

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