Мне нужно отправить видеофайл на parse.com. Parse com работает с байтом [].Исключение OutOfMemory при получении массива байтов
Я получаю массив байтов из видеофайла, и он работает нормально. Когда я использовать огромное видео файл как 100 мб он дает мне:
05-25 16:27:48.934 23544-23544/com.ray.tapinto E/art﹕ Out of memory: Heap Size=192MB, Allocated=80MB, Capacity=512MB
05-25 16:27:48.934 23544-23544/com.ray.tapinto E/art﹕ Throwing OutOfMemoryError "Failed to allocate a 134215692 byte allocation with 16777120 free bytes and 111MB until OOM"
05-25 16:27:48.934 23544-23544/com.ray.tapinto E/CrashReporting﹕ ParseCrashReporting caught a OutOfMemoryError exception for com.ray.tapinto. Building report.
05-25 16:27:48.944 23544-23544/com.ray.tapinto E/CrashReporting﹕ Handling exception for crash
java.lang.OutOfMemoryError: Failed to allocate a 134215692 byte allocation with 16777120 free bytes and 111MB until OOM
at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
at com.ray.tapinto.ui.activity.ViewPagerActivity.getBytes(ViewPagerActivity.java:523)
at com.ray.tapinto.ui.activity.ViewPagerActivity.onActivityResult(ViewPagerActivity.java:494)
at android.app.Activity.dispatchActivityResult(Activity.java:6163)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3877)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3931)
at android.app.ActivityThread.access$1300(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1408)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5721)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
использование:
...
InputStream iStream = getContentResolver().openInputStream(videoUri);
byte[] inputData = getBytes(iStream);
....
private byte[] getBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
Авария на линии byteBuffer.write(buffer, 0, len);
Сохранения файла через разбор
final ParseFile imageFile = new ParseFile(filename, imageData);
imageFile.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if(e==null){
}
}
}
РЕШЕНИЯ Я обнаружил, что parse.com позволяет отправлять только файлы размером менее 10 Мбайт, поэтому он предназначен только для хранения небольших данных, таких как URL-адреса, миниатюры и т. Д.
мне нужно отправить файл на сервер parse.com. Parse com работает только с байтом [] –
Покажите этот бит кода, который использует их API. Вы, вероятно (можно надеяться) можете отправить куски 'byte []' – weston
, добавленные в раздел Parse part –