好的,这是怎么回事。
过去两天我一直在努力解决这个问题,但我没有运气。
症状:
我的应用程序在AsyncTask中下载一个文件,并将其存储在外部SD卡上。但是,在Android仿真器中运行时,它无法读写SD卡。
我遇到的主要错误是“只读”错误。可以通过重新安装rootfs 和更改/ mnt / sdcard 来“解决”,但是随后出现错误,提示没有文件存在,并且无法使用我的应用程序创建目录。
我已尝试解决的问题:
将rootfs重新安装为rw和chmod 777 / mnt /
结果:文件不存在
编辑AVD配置文件以添加“ hw.sdCard =是。
结果:不变。
感谢您的帮助!
丹尼尔
编辑:添加下载/保存代码
public class FileDownloader extends AsyncTask<String, Integer, File> {
private static final String TAG = "FileDownloader";
private int length = 0;
@Override
protected File doInBackground(String... strings) {
try {
String[] fileSplit = strings[0].split("/");
String fileName = fileSplit[fileSplit.length - 1];
File intoFile = new File(Updater.GetUpdateFolderPath(), fileName);
if(!intoFile.exists()){
intoFile.mkdirs();
intoFile.createNewFile();
}
URL u = new URL(strings[0]);
URLConnection conn = u.openConnection();
int contentLength = conn.getContentLength();
this.length = contentLength;
DataInputStream stream = new DataInputStream(u.openStream());
int progress = 0;
byte[] buffer = new byte[contentLength];
while (stream.read(buffer) != -1) {
progress++;
publishProgress(progress);
}
stream.close();
FileOutputStream fos = new FileOutputStream(intoFile);
fos.write(buffer);
fos.flush();
fos.close();
return intoFile;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
Log.d(TAG, values[0] + ":" + length);
}
}