java - 异步文件下载器android

标签 java android

我开始创建文件下载器类。这是我所拥有的:

public class Downloader {

    //download url
    URL url;

    public Downloader(URL downloadURL){
        url = downloadURL;
    }


      public void toFile(File fName) {
            try {

                HttpURLConnection urlConnection = (HttpURLConnection) url
                        .openConnection();

                urlConnection.setRequestMethod("GET");
                urlConnection.setDoOutput(true);

                urlConnection.connect();

                FileOutputStream fileOutput = new FileOutputStream(fName);

                InputStream inputStream = urlConnection.getInputStream();

                byte[] buffer = new byte[1024];
                int bufferLength = 0;

                while ((bufferLength = inputStream.read(buffer)) > 0) {
                    fileOutput.write(buffer, 0, bufferLength);

                }

                fileOutput.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }




}

我需要在新线程中调用这个下载器。也许有人可以给我提示为什么我需要为此调用新线程或异步任务。

public void downloadFile(String urlToDownload,String path) throws MalformedURLException{




        new Thread(new Runnable() {
            public void run() {
                new Downloader(new URL(urlToDownload)).toFile(new File(path));

                 }


          }).start();
}

所以当我想下载我的文件时,它表明下载是异步的。

我真的不想那样。 我想创建下载器,我可以在其中选择是同步还是异步下载文件。

但首先,我想知道文件是何时下载的。我怎么会知道这个?

也许有人做过这件事并且可以帮助我。 我需要知道文件何时下载。

谢谢。

最佳答案

  1. 您无法在主线程上下载任何内容,在 < 3.0 版本中会出现“应用程序无响应”对话框,而在 3.0 及更高版本中只会出现异常。

  2. 您目前的做法几乎是正确的。

  3. 如果您想发布下载进度并通知 UI 下载完成,您可以使用 AsyncTask , HandlerIntent通知任何应用程序组件有关已完成的下载。

关于java - 异步文件下载器android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9885043/

相关文章:

java - java 1.6 使用哪个 jdbc 驱动程序?

java - JavaPNS 队列可以在 GAE 中使用吗?批量 APN 负载的方法有哪些?

java - Android Java - DataInputStream 从套接字到字符串

android - 来自前后摄像头的 FFmpeg 视频连接创建视频翻转

java - 如何检查字符串的前四个字符是否为 A-G,后 3 个字符是否为数字?

java - JsonReaderException ,当从 Android 调用 AWS lambda 函数时

java - Java中的引用变量有大小吗?

android - 对 CouchDB 和 Couchbase 感到困惑

android - BroadcastReceiver 中的 SharedPreferences 似乎没有更新?

android - Libgdx 在运行时从 facebook 获取图像