从服务器下载一个文件到 phone
Download a file from server to phone
我无法从服务器将文件下载到 Android phone 上的指定路径,但是 运行 此代码时没有任何反应。
我已经在清单文件中使用了所有必需的权限:
<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 class:
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);
}
}
在 Android 中,您不能在主线程上执行与网络相关的任务 运行,指南指定主线程用于 UI 任务。
为了执行网络操作,例如下载文件、执行 GET 和 POST 请求以及其他各种请求,您需要使用 AsyncTask
有很多方法可以实现 AsyncTask,您可以在 Stack Overflow 和其他网站上找到很多示例,我将 link 下面介绍一些:
- Guide from Vogella
- A similar question on SO
请参阅我提供的指南,了解如何使用 AsyncTask 在应用后台执行长时间的 运行ning 任务。
弄清楚基本概念后应该不会太难用
我无法从服务器将文件下载到 Android phone 上的指定路径,但是 运行 此代码时没有任何反应。
我已经在清单文件中使用了所有必需的权限:
<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 class:
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);
}
}
在 Android 中,您不能在主线程上执行与网络相关的任务 运行,指南指定主线程用于 UI 任务。
为了执行网络操作,例如下载文件、执行 GET 和 POST 请求以及其他各种请求,您需要使用 AsyncTask
有很多方法可以实现 AsyncTask,您可以在 Stack Overflow 和其他网站上找到很多示例,我将 link 下面介绍一些:
- Guide from Vogella
- A similar question on SO
请参阅我提供的指南,了解如何使用 AsyncTask 在应用后台执行长时间的 运行ning 任务。
弄清楚基本概念后应该不会太难用