我一直在解決這個問題。以下是最新的狀態。如何用android發送視頻附件
我有一個應用程序,允許一個用戶發送附件給其他用戶。
這裏是解剖:
爲了讓附件發送,下面的代碼被用於:
public void onGetAttachmentClicked(View view) {
Intent attachment = new Intent(Intent.ACTION_GET_CONTENT);
attachment.setType("*/*");
startActivityForResult(Intent.createChooser(attachment, "Attachment"),
ATTACHMENT_REQUEST_CODE);
}
….
//inside onActivityResult
if (requestCode == ATTACHMENT_REQUEST_CODE) {
mAttachmentUri = data.getData();
}
….
//inside do in background, I convert uri to byte[] which I then send to the blobstore
問題
無論我使用哪種方法來轉換將uri轉換爲字節數組,我得到相同的錯誤日誌
03-13 08:15:24.753: W/dalvikvm(9451): threadid=21: thread exiting with uncaught exception (group=0x40d9a2a0)
03-13 08:15:24.824: E/AndroidRuntime(9451): FATAL EXCEPTION: AsyncTask #4
03-13 08:15:24.824: E/AndroidRuntime(9451): java.lang.RuntimeException: An error occured while executing doInBackground()
03-13 08:15:24.824: E/AndroidRuntime(9451): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
03-13 08:15:24.824: E/AndroidRuntime(9451): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
那裏不多。所以我使用調試器來完成,這裏是我發現的。當我使用下面的方法,在while循環錯誤發生後一些次數的迭代
public static byte[] uriToByteArray(Uri uri, Context context) throws IOException {
InputStream inputStream = context.getContentResolver().openInputStream(uri);
// this dynamically extends to take the bytes you read
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
// this is storage overwritten on each iteration with bytes
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
// we need to know how may bytes were read to write them to the byteBuffer
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
// and then we can return your byte array.
return byteBuffer.toByteArray();
}
如果我使用Apache常見,代碼仍然在轉換過程中,並用相同的錯誤
context.getContentResolver().openInputStream(uri);
byte[] attachmentBites = IOUtils.toByteArray(in);
失敗
注意:
如果附件是圖像,一切工作正常 - 完全相同的代碼。但是,如果附件是一個視頻,那麼我得到的錯誤。另外,爲了測試,我用手機的攝像機拍攝了視頻。
應該有更多的堆棧跟蹤比你有什麼。另外,請記住,除非視頻非常短(例如幾秒鐘),否則無法將足夠的空間載入內存。 – CommonsWare
@CommonsWare:哇!這是有啓發性的。我會做一些實驗。同時我不得不問。 1)人們如何發送視頻附件? 2)錯誤跟蹤是你看到的,有什麼我可以做的從跟蹤中看到更多的錯誤? – learner