3

一度に複数の画像をアップロードしているときに、ステータスバー通知領域にプログレスバーを表示するプログレスバーを表示したいと思います。情報は 1/5 と 2/5 などです。ここで、1 はアップロードされた画像の数、5 はアップロードされる画像の総数です。

ここで、通知領域に進行状況バーを表示できます。プログレスバー(1/5など)の更新を表示するためにアップロードされた(完了した)画像の数を計算する方法を教えてください。前もって感謝します。

より明確にするために

単一の画像をサーバーにアップロードする非同期タスクがあります。しかし、私にはできません

1>画像全体のサイズを計算します(たとえば、5画像)

2>合計5枚の画像がアップロードされた画像の数を見つける方法

private class FileUploadTask extends AsyncTask<Object, Integer,String> {

    private ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(context);
        dialog.setMessage("Uploading...");
        dialog.setIndeterminate(false);
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setProgress(0);
        dialog.show();
    }

    @Override
    protected String doInBackground(Object... arg0) {
        try {
            File file = new File("/mnt/sdcard/DCIM/100MEDIA/IMAG0149.jpg");
            FileInputStream fileInputStream = new FileInputStream(file);
            byte[] bytes = new byte[(int) file.length()];
            fileInputStream.read(bytes);
            fileInputStream.close();

            URL url = new URL("http://android.com.bd/form.php");
            HttpURLConnection connection = 
                    (HttpURLConnection) url.openConnection();
            OutputStream outputStream = connection.getOutputStream();

            int bufferLength = 1024;
            for (int i = 0; i < bytes.length; i += bufferLength) {
                int progress = (int)((i / (float) bytes.length) * 100);
                Log.i("progress",progress+"dfdf");
                publishProgress(progress);
                if (bytes.length - i >= bufferLength) {
                    outputStream.write(bytes, i, bufferLength);
                } else {
                    outputStream.write(bytes, i, bytes.length - i);
                }
            }
            publishProgress(100);

            outputStream.close();
            outputStream.flush();

            InputStream inputStream = connection.getInputStream();
            // read the response
            inputStream.close();
            return "ok";

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... progress) {
        dialog.setProgress(progress[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        Log.v("sds", result);
        try {
            dialog.dismiss();
        } catch(Exception e) {
        }

    }

}
4

3 に答える 3

4

この TL;DR ブログ投稿/チュートリアルをご覧ください。同様のことができるはずです。ProgressDialogを使用し、 を使用してその状態を更新することをお勧めしますASyncTaskASyncTask画像のアップロードにすでに を使用している場合は、すでに部品が配置されています。

http://toolongdidntread.com/android/android-multipart-post-with-progress-bar/

この SO の質問も見てください - Download a file with Android, and shown the progress in a ProgressDialog . あなたの質問は以前に回答されています。をカスタマイズして、進行状況バーを 1/5、2/5 などに表示するようにソリューションを調整するだけですonProgressUpdate。私はこのコードをテストしていませんが、これらの行に沿って、必要に応じて進行状況を段階的に表示できるようになると思います。

    @Override
    protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);
        if (progress[0] < 20) {            
            mProgressDialog.setProgress(0);
        } else if (progress[0] < 40) {            
            mProgressDialog.setProgress(20);
        }
        else if (progress[0] < 60) {            
            mProgressDialog.setProgress(40);
        }
        else if (progress[0] < 80) {            
            mProgressDialog.setProgress(60);
        }
        else if (progress[0] < 100) {            
            mProgressDialog.setProgress(80);
        }
        else if (progress[0] == 100) {            
            mProgressDialog.setProgress(100);
        }
    }
于 2012-09-11T08:56:49.763 に答える
-1

まあ、それは本当に画像をダウンロードする方法に依存しますか?

私がアドバイスするのは、あるDownloadManagerクラスのインスタンス (シングルトン) を作成することです。これは、開始および終了したダウンロードの数を数えて管理します。このインスタンスは、新しいダウンロードの作成に使用され、ダウンロードが完了するたびに通知されます。通知されると、進行状況バーを更新できます。

しかし、これは非常に一般的な答えです。現在ダウンロードをどのように行っているかについての詳細な情報がなければ、これ以上のことはできません (それらは別々のスレッドで行われていますか?それらは順次または並列ですか?...)

于 2012-09-11T08:50:43.417 に答える