我必须从不同的请求在同一个活动中加载数据
请求 1 将加载一些数据,请求 2 将从另一个 url 加载数据
现在我称它们为顺序的
request1.run() request2.run()
现在的问题是我需要在它们之前显示对话框并在所有数据完成后隐藏它们
谁能告诉我最好的方法是什么?
我必须从不同的请求在同一个活动中加载数据
请求 1 将加载一些数据,请求 2 将从另一个 url 加载数据
现在我称它们为顺序的
request1.run() request2.run()
现在的问题是我需要在它们之前显示对话框并在所有数据完成后隐藏它们
谁能告诉我最好的方法是什么?
AsyncTask 有工作:
doInBackground:执行长时间运行操作的代码在此方法中。当 onClick 方法在单击按钮时执行时,它会调用 execute 方法,该方法接受参数并自动调用 doInBackground 方法并传递参数。
onPostExecute:在doInBackground方法完成处理后调用该方法。doInBackground 的结果被传递给这个方法。
onPreExecute:在调用 doInBackground 方法之前调用此方法。
类登录扩展 AsyncTask {
private final static String TAG = "LoginActivity.Login";
@Override
protected void onPreExecute()
{
super.onPreExecute();
Log.d(TAG, "Executando onPreExecute Login");
//inicia diálogo de progresso, mostranto processamento com servidor.
progressDialog = ProgressDialog.show(LoginActivity.this, "Autenticando", "Contactando o servidor, por favor, aguarde alguns instantes.", true, false);
}
@SuppressWarnings("unchecked")
@Override
protected String doInBackground(Object... parametros) {
Log.d(TAG, "Executando doInBackground Login");
Object[] params = parametros;
HttpClient httpClient = (HttpClient) params[0];
List<NameValuePair> listaParametros = (List<NameValuePair>) params[1];
String result = null;
try{
result = HttpProxy.httpPost(AnototudoMetadata.URL_AUTENTICACAO, httpClient, listaParametros);
}catch (IOException e) {
Log.e(TAG, "IOException, Sem conectividade com o servidor do Anototudo! " + e.getMessage());
e.printStackTrace();
return result;
}
return result;
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
if (result == null || result.equals("")) {
progressDialog.dismiss();
Alerta
.popupAlertaComBotaoOK(
"Dados incorretos",
"Os dados informados não foram encontrados no Sistema! Informe novamente ou cadastre-se antes pela internet.",
LoginActivity.this);
return;
}
Log.d(TAG, "Login passou persistindo info de login local no device");
ContentValues contentValues = new ContentValues();
contentValues.put(AnototudoMetadata.LOGIN_EMAIL, sLogin);
contentValues.put(AnototudoMetadata.LOGIN_SENHA, sSenha);
contentValues.put(AnototudoMetadata.LOGIN_SENHA_GERADA, result);
LoginDB loginDB = new LoginDB();
loginDB.addLogin(LoginActivity.this, contentValues);
Log.d(TAG, "Persistiu info de login no device, redirecionando para menu principal do Anototudo");
Log.d(TAG, "O retorno da chamada foi ==>> " + result);
// tudo ok chama menu principal
Log.d(TAG, "Device foi corretametne autenticado, chamando tela do menu principal do Anototudo.");
String actionName = "br.com.anototudo.intent.action.MainMenuView";
Intent intent = new Intent(actionName);
LoginActivity.this.startActivity(intent);
progressDialog.dismiss();
}
}
尝试使用异步任务,沿着
private class RunRequestsTasks extends AsyncTask<Void,Void,Void>{
private Context tContext;
@Override
protected void onPreExecute(){
//Build dialog here
}
@Override
protected void doInBackground(Void... voids) {
request1.run();
request2.run()
return null;
}
@Override
protected void onPostExecute(Void voidRet){
//Dismiss dialog here
}
}
但是,如果没有更多信息,很难给出更量身定制的答案。