Java 如何仅在某个异步执行完成后执行代码?
我是编程和Android开发方面的新手。在MainActivity中,我有3种异步方法从服务器获取数据,比如说调用它Java 如何仅在某个异步执行完成后执行代码?,java,android,kotlin,Java,Android,Kotlin,我是编程和Android开发方面的新手。在MainActivity中,我有3种异步方法从服务器获取数据,比如说调用它 getUserDataFromServer() getProductsDataFromServer() getBannersFromServer() 如果每个请求都需要1秒,那么如果我一个接一个地(串联)链接它,则需要3秒来完成这3个请求 所以我想要的是。。。。我想异步(并行)发出这3个请求,如果这3个请求已经完成(失败或成功),那么我想做其他事情,比如显示Toast消息。所以
getUserDataFromServer()
getProductsDataFromServer()
getBannersFromServer()
如果每个请求都需要1秒,那么如果我一个接一个地(串联)链接它,则需要3秒来完成这3个请求
所以我想要的是。。。。我想异步(并行)发出这3个请求,如果这3个请求已经完成(失败或成功),那么我想做其他事情,比如显示Toast消息。所以我可以更快地完成,也许只需要1,2秒,而不是3秒
我不知道该怎么做,也不知道在Android中使用什么特殊方法来包装它
如何在Java或Kotlin中实现这一点?以下代码应该可以帮助您开始使用。它还解释了正在发生的事情。您可以根据需要更改参数: 执行任务:
MyTask myTask = new MyTask();
myTask.execute(String1);
//OR:
new MyTask().execute(String1, String2, String3...);
//The first type in AsyncTask<> is for specifying the type of input given.
//Second parameter: Type of data to give to onProgressUpdate.
//Third parameter: Type of data to give to onPostExecute.
private class MyTask extends AsyncTask<String, String, String> {
private String resp;
ProgressDialog progressDialog;
@Override
protected String doInBackground(String... params) {
publishProgress("Processing ..."); // Calls onProgressUpdate()
//params is the input you've given that can be used for processing.
getUserDataFromServer()
getProductsDataFromServer()
getBannersFromServer()
//Result is the String to give onPostExecute when the task is done executing.
String result = "Done Processing";
return result;
}
@Override
protected void onPostExecute(String result) {
// Get the result from your task after it is done running.
progressDialog.dismiss();
//IMPORTANT: As you asked in your question, you can now execute whatever code you
//want since the task is done running.
}
@Override
protected void onProgressUpdate(String... text) {
//Progress has been updated. You can update the proggressDialog.
}
}
创建任务:
MyTask myTask = new MyTask();
myTask.execute(String1);
//OR:
new MyTask().execute(String1, String2, String3...);
//The first type in AsyncTask<> is for specifying the type of input given.
//Second parameter: Type of data to give to onProgressUpdate.
//Third parameter: Type of data to give to onPostExecute.
private class MyTask extends AsyncTask<String, String, String> {
private String resp;
ProgressDialog progressDialog;
@Override
protected String doInBackground(String... params) {
publishProgress("Processing ..."); // Calls onProgressUpdate()
//params is the input you've given that can be used for processing.
getUserDataFromServer()
getProductsDataFromServer()
getBannersFromServer()
//Result is the String to give onPostExecute when the task is done executing.
String result = "Done Processing";
return result;
}
@Override
protected void onPostExecute(String result) {
// Get the result from your task after it is done running.
progressDialog.dismiss();
//IMPORTANT: As you asked in your question, you can now execute whatever code you
//want since the task is done running.
}
@Override
protected void onProgressUpdate(String... text) {
//Progress has been updated. You can update the proggressDialog.
}
}
//AsyncTask中的第一个类型用于指定给定输入的类型。
//第二个参数:要提供给onProgressUpdate的数据类型。
//第三个参数:提供给onPostExecute的数据类型。
私有类MyTask扩展了AsyncTask{
私有字符串resp;
进行对话进行对话;
@凌驾
受保护的字符串doInBackground(字符串…参数){
publishProgress(“处理…”);//调用onProgressUpdate()
//params是您提供的可用于处理的输入。
getUserDataFromServer()
getProductsDataFromServer()
getBannersFromServer()
//结果是当任务完成执行时,给onPostExecute的字符串。
String result=“已完成处理”;
返回结果;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//在任务运行完成后获取任务的结果。
progressDialog.disclose();
//重要提示:正如您在问题中所问的,您现在可以执行您需要的任何代码
//由于任务已在运行中完成,因此需要。
}
@凌驾
受保护的void onProgressUpdate(字符串…文本){
//进度已更新。您可以更新ProggersDialog。
}
}
嘿,Alexa。这其实并不难做到,因为有很多教程和文章解释如何做到这一点。你试过自己查吗?试着找出问题。或者。好的,谢谢@IshaanJavali,我尝试过搜索,但我不知道正确的关键字,所以我想我需要先花点时间来了解AsyncTask是的。文档肯定会对您有所帮助。