4

AsyncTask (メイン アクティビティで開始) を使用してデータをロードしています。

Context context = VehicleTabView.this;
ProgressDialog progressDialog = new ProgressDialog(context);
progressDialog.setMessage("Loading...");
new LoadingVehicles(context, progressDialog).execute(null, null, null);

AsyncClass は次のとおりです。

package com.example.schedule_vehicles;

import com.example.utils.VehicleNames;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;

    // Showing a ProgressDialog once loading the list of vehicles is completed using an AsyncTask
    public class LoadingVehicles extends AsyncTask<Void, Void, Void> {
    Context context;
    ProgressDialog progressDialog;

    public LoadingVehicles(Context context, ProgressDialog progressDialog) {
        this.context = context;
        this.progressDialog = progressDialog;
    }

    @Override
    protected void onPreExecute() {
        progressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        new VehicleNames(context);

        return null;
    }

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

ProgressDialog が画面に表示されない問題。

Log.d と入力して、プログラムが onPreExecute、doInBackground、onPostExecute のすべてのフェーズを通過しているかどうかを確認します。プログラムはすべてのフェーズを通過し、必要なジョブを実行しています。しかし、ProgressDialog は表示されません。このことについて多くの情報を読みましたが、DOINBACKGROUND メソッドによってブロックされているメイン スレッドによって PRE および POST 実行が開始されているようです。これが ProgressDialog を表示しない理由です。これがどのように解決されるのか、いくつかの答えを見つけようとしましたが、成功しませんでした。

誰かがこれに直面した場合は、あなたの経験を共有してください。どうもありがとう!

4

5 に答える 5

1

ProgressDialog を Task に渡します。AsyncTask 内からではなく、AsyncTask を開始する前に show() するだけです。

于 2012-08-16T15:58:10.473 に答える
1

試す :

ProgressDialog progressDialog = new ProgressDialog([Activity Name].this);

これで問題が解決するかどうか教えてください。

于 2012-08-16T15:59:22.200 に答える
1

あなたのコードは私には良さそうです。あなたは Asynctask について正しく理解しており、それらの使用も正しいようです。私が考えることができる唯一のことは、UI スレッドでも execute() を呼び出していることを確認する必要があるということです。投稿されたコードから、あなたがどのコンテキストにいるのかわかりません。

「this」をコンテキストとして渡すことができることを確認してください。これにより、UI スレッド上にあるかどうかがわかります。

ProgressDialog progressDialog = new ProgressDialog(this);
于 2012-08-16T16:00:32.850 に答える