【问题标题】:Progress bar for file transfer to sd文件传输到 sd 的进度条
【发布时间】:2012-02-11 19:21:37
【问题描述】:

我使用以下代码从 Internet 下载文件。使用此代码我有一个进度对话框

private void startDownload() {
        String url = tv.getText().toString();
        new DownloadFileAsync().execute(url);
    }

    class DownloadFileAsync extends AsyncTask<String, String, String>  {

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

        @Override
        protected String doInBackground(String... aurl) {
            int count;

            try {

                URL url = new URL(aurl[0]);
                URLConnection conexion = url.openConnection();
                conexion.connect();

                int lenghtOfFile = conexion.getContentLength();
                Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);

                InputStream input = new BufferedInputStream(url.openStream());
                OutputStream output = new FileOutputStream(
                        "data/data/com.xxxxxxxx.android/app_p_pic/"
                                + "blabla" 
                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress("" + (int) ((total * 100) / lenghtOfFile));
                    output.write(data, 0, count);
                }

                output.flush();
                output.close();
                input.close();
            } catch (Exception e) {

                e.printStackTrace(); 

            }
            return null;

        }

        protected void onProgressUpdate(String... progress) {
            Log.d("ANDRO_ASYNC", progress[0]);
            mProgressDialog.setProgress(Integer.parseInt(progress[0]));
        }

        @Override
        protected void onPostExecute(String unused) {
            dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
        }


    }
}

有没有办法使用上述代码将文件从内部传输到 sd?目前我使用以下代码,但无法使用进度条获得进度

protected void ontrans() {
        String title = tv.getText().toString();

        try {

            myInput = new FileInputStream(title);


            File directory = new File(Environment.getExternalStorageDirectory()
                    + "/android_files/data/secure");
            if (!directory.exists()) {
                directory.mkdirs();
            }

            OutputStream myOutput = new FileOutputStream(
                    Environment.getExternalStorageDirectory()
                            + "/android_files/data/secure/" + chosenFile);

            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0) {
                myOutput.write(buffer, 0, length);
            }

            myOutput.flush();

            myOutput.close();

            myInput.close();
            Toast.makeText(File_exActivity.this, "file move Succesfully!",
                    Toast.LENGTH_SHORT).show();
            showDialog(11);
        } catch (FileNotFoundException e) {
            Toast.makeText(File_exActivity.this, "no file found!",
                    Toast.LENGTH_LONG).show();

            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            Toast.makeText(File_exActivity.this, "move unsuccesfull!",
                    Toast.LENGTH_LONG).show();

            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

【问题讨论】:

    标签: android file progress transfer


    【解决方案1】:

    要考虑的事情:您可以获得源文件File.length() 和目标的大小。比较它们以在进度条中显示差异。

    File.length() 方法根据 javadoc 返回以下内容:

    此抽象路径名表示的文件的长度(以字节为单位), 如果文件不存在,则为 0L。某些操作系统可能会返回 0L 用于表示系统相关实体的路径名,例如设备或 管道。

    【讨论】:

      【解决方案2】:

      您需要做的是创建一个进度条对象(如果需要,您可以将其添加到布局中或以编程方式创建),然后在下载 while 循环中更新其状态。创建进度条的方法可以在这里找到:http://developer.android.com/reference/android/widget/ProgressBar.html

      【讨论】:

      • 我已经在第一个代码中获得了一个进度条,该代码从互联网下载,第二个代码我用来从 sd 传输到 internal , internal 到 sd ect .. 我需要的是要么第一个代码可以在显示进度的同时传输文件,或者第二个代码可以显示进度。
      猜你喜欢
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 2011-09-11
      • 2017-07-28
      • 2020-11-13
      相关资源
      最近更新 更多