简体   繁体   中英

Android dialog box and Async Tasks

I am trying to make a progress dialog that pop up while things are loading. I have figured out how to make dialog boxes appear and disappear and can change whats in them but I have multiple async tasks and want the dialog to appear when the first async task starts and then disappear when the last async tasks finishes.

Is there a way for the dialogs to know when all async tasks are complete for a given activity? I am having problems on how to approach this issue. Thanks for the help!

Here is a exact sample code which i used to acheive the same functionality.

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);
        }
    }
}

If you have multiple/separate classes for async tasks you can create a static utility class to keep track of and update count.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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