0

AsyncTask内に設定された進行状況サークルがあります。asynctaskの実行中に約1秒間表示され、その後消えます。タスクが完了したら、戻るボタンを押すと、円が長時間表示されます。どうしてこれなの?

private class AsyncGetRota extends AsyncTask<String, Void, Void> {

        ProgressDialog progressDialog;


        @Override
        protected void onPreExecute()
        {
            progressDialog= ProgressDialog.show(NfcscannerActivity.this, 
                    "Connecting to Server"," retrieving rota...", true);

            //do initialization of required objects objects here                
        };      


        @Override
        protected Void doInBackground(String... params) {



            try {
                Log.e(TAG, "inside doInBackground");
                rotaArray = nfcscannerapplication.loginWebservice.getRota(params[0], params[1]);

                cancel(true);



            } catch (Exception e) {
               e.printStackTrace();
            }
            return null;

        }

        @Override
        protected void onPostExecute(Void result)
        {
            super.onPostExecute(result);
            progressDialog.dismiss();
        };



    }

[アップデート]

getRota.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Log.e(TAG, "onclicked getRota");

                    String[] params = new String[]{"36", "18-09-2012"}; 
                    AsyncGetRota agr = new AsyncGetRota();
                    agr.execute(params);

                    for(int i = 0; i < 60; i++){

                        if(agr.isCancelled() == true){
                            Log.e(TAG, "asyncTask is finished");
                            break;
                        }


                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }//end of for loop

                    Intent intent = new Intent(NfcscannerActivity.this,
                            GetRota.class);

                    Bundle b = new Bundle();
                    b.putSerializable("rotaArray", rotaArray);

                    intent.putExtra("rotaArrayBundle", b);
                    startActivity(intent);

                }// end of onclick
            });
4

3 に答える 3

0
...
new MyAsyncTask().execute(string);
...
}

class MyAsyncTask extends AsyncTask<String, Void, Whatever > {
    ...
    @Override
    protected Whatever doInBackground(String... params) {

       Log.e(TAG, "inside doInBackground");
       rotaArray = nfcscannerapplication.loginWebservice.getRota(params[0],       params[1]);
       return rotaArray;
    }

    @Override
    protected void onPostExecute(Whatever result)
    {
        super.onPostExecute(result);
        if(progressDialog != null)
        progressDialog.dismiss();

        Intent intent = new Intent(NfcscannerActivity.this, GetRota.class);
        Bundle b = new Bundle();
        b.putSerializable("rotaArray", result);

        intent.putExtra("rotaArrayBundle", b);
        startActivity(intent);
    }
}

AsyncTaskを開始した後も実行を続行し、ループなどを使用してブロックしないようにする必要があります。

于 2012-09-21T14:17:30.000 に答える
0

次のように実装してみてください。

protected void onPreExecute() {
   dialog = new ProgressDialog(activity);
   dialog.setMessage("Processing...");
   dialog.show();
}

protected void onPostExecute(Void result) {
   if (dialog.isShowing()) {
       dialog.dismiss();
   } 
};

それはいつも私のために働く

于 2012-09-21T14:07:46.163 に答える
0

ここでのいくつかの問題は、ProgressDialogを初期化せず、このようにProgressDialogを初期化するコンストラクターを初期化することです...

 public AsyncGetRota(Activity activity) {
        this.activity = activity;
        dialog = new ProgressDialog(activity);
    } 

次に、onPostExecuteで、次のようにProgressDialogがnullかどうかを確認します。

@Override
    protected void onPostExecute(Void result)
    {
        super.onPostExecute(result);
        if(progressDialog != null)
        progressDialog.dismiss();
    }
于 2012-09-21T14:14:35.793 に答える