0

Webサービスを呼び出してxmlを解析するこの非同期タスクがあります

@Override
protected void onPreExecute(){
super.onPreExecute();
time = System.currentTimeMillis();
}
 protected Boolean doInBackground(Integer... params) {
  //code 
 }

protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
    difftime = System.currentTimeMillis() - time;
 }

非同期タスクの実行中にロード画面を表示したいのですが、こうしていると非同期タスクが終了する前にロード画面が終了してしまいます

        super.onCreate(savedInstanceState);
        setContentView(R.layout.loading_screen);

            final CallWebService callTarif = new CallWebService(6,sett.getDeviceId());
            callTarif.execute();

new Handler().postDelayed(new Runnable(){ 
        @Override 
            public void run() { 

                LoadingScreen.this.finish(); 
                Intent intent = new Intent(LoadingScreen.this, NextActivity.class);
                                    startActivity(intent);            
            } 

        }
        },callTarif.difftime);
4

3 に答える 3

0

AsyncTaskpostDelayedを完了する前に実際に呼び出されます。

これらのコード行を入れるだけです

LoadingScreen.this.finish(); 
Intent intent = new Intent(LoadingScreen.this, NextActivity.class);
startActivity(intent);     

opPostExecute()AsyncTaskの

protected void onPostExecute(Boolean result) {
super.onPostExecute(result);

    difftime = System.currentTimeMillis() - time;
    LoadingScreen.this.finish(); 
    Intent intent = new Intent(LoadingScreen.this, NextActivity.class);
    startActivity(intent);      
}

そしてハンドラを削除します new Handler().postDelayed(new Runnable(){

于 2013-01-24T09:26:23.913 に答える
0

async task を使用して Web サービスにアクセスするときに、ロードを表示するために Handler を使用する必要はありません。onPreExecute()AsyncTask のメソッドを使用してロード画面を表示し、実行完了onPostExecute時にこのメソッドが呼び出されるため、内部で終了します。doInBackgroundコード コードを次のように変更します。

      @Override
      protected void onPreExecute() {
            // show loading bar here
      }
@Override
      protected String doInBackground(String... params) {
                 // do network operation here
            return null;
      }      

      @Override
      protected void onPostExecute(String result) {      
          // dismiss loading bar here         
      }
于 2013-01-24T09:29:06.163 に答える
0

ロード画面の onPreExecute メソッドを開始し、非同期タスクの onPostExecute メソッドを強制終了します

于 2013-01-24T09:27:50.460 に答える