2012-04-16 1 views
1

Итак, я создаю приложение, в котором есть приложение File Transfer, которое позволяет передавать файлы из одной папки в основную папку на другую. Тем не менее, я получаю эту ошибку: «VM не позволит нам выделять ... байты».VM не позволяет нам выделять ... bytes

LogCat Ошибки:

04-16 16:32:06.072: E/dalvikvm-heap(17644): 184440-byte external allocation too large for this process. 
04-16 16:32:06.132: E/GraphicsJNI(17644): VM won't let us allocate 184440 bytes 

Кто-нибудь есть решение, чтобы преодолеть это? Я видел несколько сообщений об изображениях, но не файлы.

Добавление кода: (по запросу). Обратите внимание, что этот код также скопирован в другом месте, но есть несколько изменений, которые я сделал самостоятельно.

private static void copyFile(File sourceFile, File destFile) 
      throws IOException { 
    if (!sourceFile.exists()) { 
      return; 
    } 
    if (!destFile.exists()) { 
      destFile.createNewFile(); 
    } 
    destFile = new File(destFile.toString().substring(0, destFile.toString().lastIndexOf('/'))); 
    FileChannel source = null; 
    FileChannel destination = null; 
    source = new FileInputStream(sourceFile).getChannel(); 
    destination = new FileOutputStream(destFile).getChannel(); 
    if (destination != null && source != null) { 
      destination.transferFrom(source, 0, source.size()); 
    } 
    if (source != null) { 
      source.close(); 
    } 
    if (destination != null) { 
      destination.close(); 
     } 
    } 

Как уже упоминалось, ошибка memmory - это изображение, и да, спасибо за то, что вы нашли мою вызывающую ошибку ошибку. Я исправлю это вскоре после того, как я закончил этот файлNotFoundException.

Извините за долгое ожидание на LogCat обновить забыл добавить в попытке и поймать внутри метода копирования файла, который другой способ затем улавливает другую ошибку другого метода, который отображается то, что было на вершине:

04-16 18:19:41.322: W/System.err(4989): java.io.FileNotFoundException: /mnt/sdcard/ActivityApp (Is a directory) 
04-16 18:19:41.322: W/System.err(4989):  at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 
04-16 18:19:41.322: W/System.err(4989):  at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232) 
04-16 18:19:41.322: W/System.err(4989):  at java.io.FileOutputStream.<init>(FileOutputStream.java:94) 
04-16 18:19:41.322: W/System.err(4989):  at java.io.FileOutputStream.<init>(FileOutputStream.java:66) 
04-16 18:19:41.322: W/System.err(4989):  at tab.layout.FileFusionActivity.copyFile(FileFusionActivity.java:107) 
04-16 18:19:41.322: W/System.err(4989):  at tab.layout.FileFusionActivity.onListItemClick(FileFusionActivity.java:78) 
04-16 18:19:41.322: W/System.err(4989):  at android.app.ListActivity$2.onItemClick(ListActivity.java:319) 
04-16 18:19:41.322: W/System.err(4989):  at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
04-16 18:19:41.322: W/System.err(4989):  at android.widget.ListView.performItemClick(ListView.java:3513) 
04-16 18:19:41.322: W/System.err(4989):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 
04-16 18:19:41.322: W/System.err(4989):  at android.os.Handler.handleCallback(Handler.java:587) 
04-16 18:19:41.322: W/System.err(4989):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-16 18:19:41.322: W/System.err(4989):  at android.os.Looper.loop(Looper.java:123) 
04-16 18:19:41.322: W/System.err(4989):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-16 18:19:41.322: W/System.err(4989):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-16 18:19:41.322: W/System.err(4989):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-16 18:19:41.322: W/System.err(4989):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-16 18:19:41.332: W/System.err(4989):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-16 18:19:41.332: W/System.err(4989):  at dalvik.system.NativeStart.main(Native Method) 
+0

как вы копируете эти файлы? можете ли вы опубликовать код? – Renard

+0

Исходный код добавляется в соответствии с запросом. – sdfwer

+0

Этот logcat от GraphicsJNI (который является клеем между кодом Java Java и собственной библиотекой Skia) очень похож на проблему с распределением битмап-данных. Можете ли вы разместить полный стек logcat, чтобы мы могли видеть, какая строка в коде тура вызывает проблему? – Torid

ответ

1

EDIT: я должен был заметить это раньше, но ваш лог-кот доказывает это. Ошибка в этой строке

destFile = new File(destFile.toString().substring(0, destFile.toString().lastIndexOf('/'))); 

изменить его на что-то вроде этого

destFile = new File(destFile.toString().substring(0, destFile.toString().lastIndexOf('/')),"hello.dat"); 

ошибки вы видите, не могут быть непосредственно связаны с процессом копирования. У вас есть profiled приложение для проверки использования памяти? Еще одна вещь, которую вы можете попробовать - скопировать файл в куски, как описано в этом question

+0

Извините за долгое ожидание. Я просто добавил logcat истинной ошибки. Видимо, я забыл изменить этот метод с помощью блока try и catch, поэтому я получил другое исключение в другом месте. – sdfwer

+0

Да, вы правы! Я забыл имя. Я как-то понял, что сейчас просто собирался ответить, но до сих пор не проверял. – sdfwer