3

ProgressBar を使用して、ファイルのダウンロードと保存の進行状況を表示しようとしています。ProgressBar が表示されますが、タスクが終了して閉じるまで 0 のままです。さまざまなアプローチを試しましたが、更新されません。コードに何か問題がありますか?

class downloadData extends AsyncTask<Void, Integer, Void>
{

    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params)
    {
        int count; 
        try 
        {

            URL url = new URL("http://google.com");
            URLConnection conexion = url.openConnection();
            conexion.connect();
            int lenghtOfFile = conexion.getContentLength();
            InputStream is = url.openStream();
            File testDirectory = new File(MainActivity.this.getFilesDir(), "downloadedData.txt");
            if (!testDirectory.exists()) 
            {
                testDirectory.mkdir();
            }
            FileOutputStream fos = new FileOutputStream(testDirectory+"/downloadedData.txt");
            byte data[] = new byte[1024];
            long total = 0;
            while ((count = is.read(data)) != -1) 
            {
                total += count;

                int neki = (int)(((double)total/lenghtOfFile)*100);
                this.publishProgress(neki);

                fos.write(data, 0, count);
            }
            is.close();
            fos.close();
        } 
        catch (Exception e) 
        {
            Log.e("ERROR DOWNLOADING","Unable to download" + e.getMessage());
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values)
    {
        super.publishProgress(values);
        progressDialog.setProgress(values[0]);

    }

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

onCreate

    progressDialog = new ProgressDialog(this);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.setCancelable(true);
    progressDialog.setMax(100);
    progressDialog.setMessage("Downloading Data");

ダウンロードを開始するボタンをクリックすると、次のようになります。progressDialog.show();

4

4 に答える 4

0

これは少し遅いように聞こえるかもしれませんがinvalidate()、進行状況を設定した後で ProgressBar を試しましたか? 進行状況を設定したときに自動的に実行されるかどうかはわかりません。

于 2013-02-04T16:02:00.223 に答える
0

コードの何が問題なのかはわかりませんが、これを試してみてください progressDialog.incrementProgressBy(incrementValue);

于 2013-02-04T15:36:13.410 に答える
0

進行状況が計算される場所をデバッグしてみてください。キャストの問題である可能性があります。除算後に 0 になるのを避けるために、2 つのステップで実行することができます。しかし、ここでもこの進捗値で変数を作成し、そこにブレークポイントを置いて、キャストの問題を確認する必要があります!

于 2013-02-04T15:33:49.173 に答える
0

私も同じ問題に直面しており、何時間も費やしていました。問題は進行値の計算にあります。

 int neki = (int)(((double)total/lenghtOfFile)*100);

代わりに、2 つのステップで計算を行う必要があります。

int neki = total * 100;
neki = (int)(neki/lengthOfFile);

publishProgress(neki);

これで私の問題は解決しました。これが役立つことを願っています。

于 2016-02-08T23:44:54.757 に答える