我正在设计Android应用程序,它将图像文件从SD卡中的特定文件夹上传到Google驱动器。但我得到了
E/AndroidRuntime( 6808): FATAL EXCEPTION: main
E/AndroidRuntime( 6808): java.lang.OutOfMemoryError error while trying to upload the files.
代码段:
File sdDir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File yourDir = new File(sdDir, "CameraAPIDemo");
for (File f : yourDir.listFiles()) {
if (f.isFile()){
String name = f.getName();
Log.i(TAG, "name =" + name);
String CompletePath=yourDir + "/" + name;
//Decode the file from the folder to bitmap
Bitmap bmp = BitmapFactory.decodeFile(CompletePath);
saveFileToDrive(sFolderId,bmp,name);
}
saveFileToDrive包含将一个文件上传到Google云端硬盘的逻辑。如何进行?请帮帮我......
答案 0 :(得分:0)
你正在逐步加载所有图像到for循环中的内存,因为我假设saveFileToDrive在UI上的一个单独的线程上运行。发生的事情是你正在尝试将SD目录中的所有文件加载到内存中并将它们全部上传到Drive并行(由于线程)。
一个简单的解决方案是使saveFileToDrive成为一个AsyncTask,它将在@Override onPostExecute()方法中通知循环(在UI线程上)。您将在单独的线程上上传图片,以便UI不会滞后,但一次只上传一张,这样就不会内存耗尽。
您是否浏览过此处的文档:https://developers.google.com/drive/android/create-file?