我无法从服务器将文件下载到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);
}
}
答案 0 :(得分:1)
在Android中,您无法在主线程上运行与网络相关的任务,指南指定主线程用于UI任务。
为了执行网络操作,例如下载文件,执行GET和POST请求以及其他各种请求,您需要使用AsyncTask
有很多方法可以实现AsyncTask,你可以在Stack Overflow和其他网站上找到很多例子,我将在下面链接一些:
请参阅我提供的指南,了解如何使用AsyncTask在应用程序的后台执行长时间运行的任务。
在弄清楚基本概念
之后,它不应该太难使用