0

私のアプリには、何かを行うときに進行状況ダイアログを表示するこのメソッドを持つサービス クラスがあります。

private void openprogresdialog() {

new AsyncTask<Integer, Integer, Boolean>()
{
    ProgressDialog progressDialog;

    @Override
    protected void onPreExecute()
    {
        progressDialog = ProgressDialog.show(thisActivity, "Dialog","Loading...");
    }

    @Override
    protected Boolean doInBackground(Integer... params)
    {
        if (params == null)
        {
            return false;
        }
        try
        {
            Thread.sleep(params[0]);
        }
        catch (Exception e)
        {
            Log.e("tag", e.getMessage());
            return false;
        }

        return true;
    }

    @Override
    protected void onPostExecute(Boolean result)
    {
        progressDialog.dismiss();
        AlertDialog.Builder b = new AlertDialog.Builder(thisActivity);
        b.setTitle(android.R.string.dialog_alert_title);
        if (result)
        {
            b.setMessage("Download succeeded");
        }
        else
        {
            b.setMessage("Download failed");
        }
        b.setPositiveButton(getString(android.R.string.ok),
                new DialogInterface.OnClickListener()
                {

                    @Override
                    public void onClick(DialogInterface dlg, int arg1)
                    {
                        dlg.dismiss();
                    }
                });
        b.create().show();
    }
}.execute(2000);

new Thread()
{
    @Override
    public void run()
    {

        DialogInterface progressDialog = null;
        progressDialog.dismiss();
    }
}.start();
}

アプリの実行中に作業の進行状況ダイアログが表示されるようにしたいのですが、アプリを実行すると次のエラーが発生します。

呼び出されていないスレッド内にハンドラーを作成できませんLooper.prepare()

どうすれば修正できますか?

編集 :

public class MyService extends Service {
    private static final String TAG = "MyService";
    Thread readthread;
    final MyService thisActivity = this;
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        final ParentActivityData data = intent.getParcelableExtra("DATA");

        readthread = new Thread(new Runnable() {
            public void run() {
                // SOME CODE TO EXECUTE //
                }
                openprogresdialog();
            }
        });

        readthread.start();

        Log.d(TAG, "onCreate");

        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onCreate() {
    }

    @Override
    public void onDestroy() {

    }
}
4

5 に答える 5

0
new Thread()
    {
        @Override
        public void run()
        {
            Looper.prepare();

            //Your Dialog goes here

            Looper.loop(); 
        }
    }.start();

HtH.

于 2015-04-15T10:16:26.767 に答える
0

Looper.prepare();スレッドの冒頭に追加するだけです

new Thread()
    {
        @Override
        public void run()
        {
            Looper.prepare();
            DialogInterface progressDialog = null;
            progressDialog.dismiss();
        }
    }.start();
于 2013-12-17T08:56:52.753 に答える