Android 我如何将下载的文件保存到我的应用程序以供以后使用?
我的应用程序使用API将数据保存到数据库。部分数据将包括文件(pdf、图像和视频)的url。我已经通过AsyncTask完成了这个api请求 我的计划是使用api提供的url->本地保存文件->将其位置存储在数据库中 通过这种方式,我可以根据一组SQLite参数调用pdf文档列表,获取文件信息,创建文件列表,并允许用户通过选择来查看pdf(或图像…或视频…) 我什么都能用,但不知道怎么用Android 我如何将下载的文件保存到我的应用程序以供以后使用?,android,file,sqlite,download,Android,File,Sqlite,Download,我的应用程序使用API将数据保存到数据库。部分数据将包括文件(pdf、图像和视频)的url。我已经通过AsyncTask完成了这个api请求 我的计划是使用api提供的url->本地保存文件->将其位置存储在数据库中 通过这种方式,我可以根据一组SQLite参数调用pdf文档列表,获取文件信息,创建文件列表,并允许用户通过选择来查看pdf(或图像…或视频…) 我什么都能用,但不知道怎么用 从url中下拉文件 本地保存文件 将当前保存的文件位置保存到数据库 我知道这是一个很大的要求,我正在寻找更好
java.io.FileNotFoundException: /storage/emulated/0/library/2/invester-service.jpg: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:416)
at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
at com.myBooks.library.BooksDB$1.run(BooksDB.java:812)
at java.lang.Thread.run(Thread.java:856)
Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
at libcore.io.IoBridge.open(IoBridge.java:400)
我已经添加了创建目录的代码(根据合子的建议),但是我得到了相同的错误。mkdir出现故障,并且存储状态在运行时显示已装载:
File folder = new File(Environment.getExternalStorageDirectory() + "/library/"+file_type);
String state = Environment.getExternalStorageState();
//create a new file, specifying the path, and the filename
//which we want to save the file as.
boolean success = true;
if (!folder.exists()) {
success = folder.mkdir();
Log.d("storage state",state);
}
if (success) {
// Do something on success
Log.d("success","made it");
} else {
// Do something else on failure
Log.d("success","didn't made it");
}
其实很简单。您只需使用HttpURLConnection和输入输出流下载文件并将其保存到您想要的任何位置,就可以完成1和2。然后,只需向数据库类添加一个方法,将保存文件的位置存储到数据库中 不久前,我编写了一个非常简单的文件下载应用程序,其中包括任务1和任务2所需的所有代码。在这里复制/粘贴有点太多,所以我只发送GitHub源链接给您。查看第102行及以下内容 记住,网络代码永远不应该在GUI线程上运行
祝你好运 哇!谢谢我会检查一下,看看它对我有什么作用。如果一切顺利,我会选择这个作为答案。是的,我在启动屏幕期间通过GUI外部的异步任务运行所有api和网络调用。听起来不错!让我知道它是如何工作的,或者如果你有任何其他问题。我的所有文件都出现“FileNotFoundException”和“open failed”错误。我尝试使用myprogress查看情况,但ProgressDialog初始化中的“上下文”似乎导致了NullPointerException错误。我已更新问题以显示错误以及调用错误的位置。我认为您需要确保/storage/emulated/0/library/2/存在,因为我不相信它会自动创建必要的目录,如果这有意义的话。那么首先检查目录是否存在?您可能需要首先创建目录结构。
File folder = new File(Environment.getExternalStorageDirectory() + "/library/"+file_type);
String state = Environment.getExternalStorageState();
//create a new file, specifying the path, and the filename
//which we want to save the file as.
boolean success = true;
if (!folder.exists()) {
success = folder.mkdir();
Log.d("storage state",state);
}
if (success) {
// Do something on success
Log.d("success","made it");
} else {
// Do something else on failure
Log.d("success","didn't made it");
}