从服务器下载文件到手机

时间:2015-04-17 17:38:20

标签: android file download server

我无法从服务器将文件下载到Android手机上的指定路径,但运行此代码时没有任何反应。
我已经在清单文件中使用了所有必需的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

这是我的MainActivity类:

private final String PATH = "/storage/sdcard0/BT/";


public void DownloadFromUrl(String fileName1) {  //this is the downloader method
    try {

        URL url = new URL(f);

        File file = new File(fileName1);


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

        ucon.setRequestMethod("GET");
        ucon.setDoOutput(true);
        ucon.connect();
        FileOutputStream fos = new FileOutputStream(file);

        InputStream is = ucon.getInputStream();

        BufferedInputStream bis = new BufferedInputStream(is);


        ByteArrayBuffer baf = new ByteArrayBuffer(50);
        int current = 0;
        while ((current = bis.read()) != -1) {
            baf.append((byte) current);
        }

                    /* Convert the Bytes read to a String. */
       // FileOutputStream fos = new FileOutputStream(file);
        fos.write(baf.toByteArray());
        fos.close();
       // Log.d("ImageManager", "download ready in"
         //       + ((System.currentTimeMillis() - startTime) / 1000)
           //     + " sec");

    } catch (IOException e) {
        Log.d("ImageManager", "Error: " + e);
    }

    }

1 个答案:

答案 0 :(得分:1)

在Android中,您无法在主线程上运行与网络相关的任务,指南指定主线程用于UI任务。

为了执行网络操作,例如下载文件,执行GET和POST请求以及其他各种请求,您需要使用AsyncTask

有很多方法可以实现AsyncTask,你可以在Stack Overflow和其他网站上找到很多例子,我将在下面链接一些:

请参阅我提供的指南,了解如何使用AsyncTask在应用程序的后台执行长时间运行的任务。

在弄清楚基本概念

之后,它不应该太难使用