2

インターネット経由でいくつかのものをアップロードしている間、進行状況バーを表示するはずの AsyncTask があります。魅力的に機能することもあれば、進行状況バーが表示されないこともあります。コードは次のとおりです。

public class Upload extends AsyncTask<Void, Void, Void> {

    private ProgressDialog dialog = new ProgressDialog(Activity.this);

    protected void onPreExecute() {
        dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
    }
    @Override
    protected Void doInBackground(Void... params) {
        //upload stuff
        return null;
    }

    protected void onPostExecute(Void result) {

        try {
            if (dialog.isShowing())
                dialog.dismiss();
            dialog = null;
        } catch (Exception e) {
            // nothing
        }
        Intent next = new Intent(getApplicationContext(), SecondActivity.class);
        startActivity(next);
        }
    }
}

doInBackground と onPostExecute は常に機能し、時には完全に魅力的に機能することもあります。ただし、アップロード中に進行状況バーが表示されないことがあります。これは競合状態ですか?そうは思いませんが、説明が見つかりません。

4

2 に答える 2

1

クラスでオブジェクトを 2 回作成しています。はProgressDialog.showすでに作成されたProgressDialogオブジェクトを返しますが、最初にそれをインスタンス化しました。は一度インスタンス化する必要があるため、最初ProgressDialogのインスタンス化を削除してから、次のように再試行してください。

private ProgressDialog dialog;

protected void onPreExecute() {
    dialog = ProgressDialog.show(Activity.this, "wait...", "", true, true);
}
于 2012-08-13T22:25:05.033 に答える
0

おそらく、その問題を引き起こす void パラメータが原因です。パラメータとして Integer を使用してみてください。

public class Upload extends AsyncTask<Integer, Integer, Integer>
于 2013-10-11T21:01:55.613 に答える