Android 将文件从服务器下载到手机

Android 将文件从服务器下载到手机,android,file,download,server,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手机上的指定路径,但运行此代码时不会发生任何事情。
我已使用清单文件中的所有必需权限:

<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"/>

在Android中,你不能在主线程上运行与网络相关的任务,指导原则规定主线程用于UI任务

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

有许多实现AsyncTask的方法,您可以在堆栈溢出和其他站点上找到许多示例,我将在下面链接一些示例:

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


在你弄清楚基本概念后,使用它应该不会太难

你会遇到什么错误?您在logcat中看到任何堆栈跟踪吗?欢迎使用堆栈溢出!我对你的问题稍加修改。您可以通过添加相关的LogCat或服务器日志来进一步改进它。另外,我删除了“any”标记,如果您阅读该标记的描述,您将看到它是关于测试的。您可以在这里得到您的答案:您是如何调用此代码的?在每个阶段添加一些有意的日志记录,这样您就可以看到部分进展。我在logcat中没有得到任何错误,而是这个进度条过程无限继续。。。。
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);
    }

    }