別のリクエストから、同じアクティビティでデータをロードする必要があります
リクエスト 1 はデータをロードし、リクエスト 2 は別の URL からデータをロードします。
今、私はそれらをシーケンシャルと呼んでいます
request1.run () request2.run ()
それらの前にダイアログを表示し、すべてのデータが終了した後にそれらを非表示にする必要があるという問題
誰かがそれを行うための最良の方法を教えてもらえますか?
別のリクエストから、同じアクティビティでデータをロードする必要があります
リクエスト 1 はデータをロードし、リクエスト 2 は別の URL からデータをロードします。
今、私はそれらをシーケンシャルと呼んでいます
request1.run () request2.run ()
それらの前にダイアログを表示し、すべてのデータが終了した後にそれらを非表示にする必要があるという問題
誰かがそれを行うための最良の方法を教えてもらえますか?
AsyncTask が機能しています:
doInBackground:実行時間の長い操作を実行するコードは、このメソッドに入ります。ボタンのクリック時に onClick メソッドが実行されると、パラメーターを受け取る execute メソッドが呼び出され、渡されたパラメーターで doInBackground メソッドが自動的に呼び出されます。
onPostExecute:このメソッドは、doInBackground メソッドが処理を完了した後に呼び出されます。doInBackground からの結果がこのメソッドに渡されます。
onPreExecute:このメソッドは、doInBackground メソッドが呼び出される前に呼び出されます。
class Login extends 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
}
}
ただし、より詳細な情報がなければ、よりカスタマイズされた回答を提供することは困難です。