【发布时间】:2016-11-03 16:40:11
【问题描述】:
我已经广泛搜索了这个问题的答案,但我不知道该怎么做。
我正在尝试使用他们的教程 (https://firebase.google.com/docs/storage/android/upload-files) 将图片上传到 Firebase 进行存储。为此,我创建了一个 IntentService 来处理所有数据库调用。这就是我不足的地方。我从另一个这样的活动中打包我的照片;
public void sendToFB() {
mImageView.setDrawingCacheEnabled(true);
mImageView.buildDrawingCache();
Bitmap bitmap = mImageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
Bundle bundle = new Bundle();
bundle.putByteArray("bitmap", data);
Intent intent = new Intent(this, FirebaseService.class);
intent.putExtra("picture", bundle);
this.startService(intent);
}
然后我在服务中解包;
@Override
protected void onHandleIntent(Intent intent) {
extras = (Bundle) intent.getExtras().get("picture");
uploadPicToFirebase();
...
然后我尝试粘贴字节数组,但我需要将其转换为字节,我不知道如何在服务中。
private void uploadPicToFirebase() {
// Get the data from an ImageView as bytes
/*mImageView.setDrawingCacheEnabled(true);
mImageView.buildDrawingCache();
Bitmap bitmap = mImageView.getDrawingCache();
*/
//Bundle extras = getIntent().getExtras();
byte[] data = extras.getByteArray("picture");
UploadTask uploadTask = mountainsRef.putBytes(data);
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
System.out.println("not ok");
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
System.out.println("helt ok");
Uri downloadUrl = taskSnapshot.getDownloadUrl();
}
});
}
当然是以IllegalArgumentException结尾
java.lang.IllegalArgumentException:字节不能为空
【问题讨论】:
-
我建议不要通过意图发送 byte[],而是保存一个临时文件,并将文件路径作为字符串传递给意图服务。 Intent extras 有一个很快就会达到的限制,尤其是在涉及作为字节数组的图像的情况下 - 阅读更多.. neotechsoftware.com/blog/android-intent-size-limit
-
使用压缩的字节数组我会达到那个文件绑定器限制吗?
-
取决于压缩字节[]的大小..在运行时你永远不会知道,因为每个图像都是不同的。我不可能知道未知输入大小的输出大小。我的建议不是答案,如下所示,它只是为了帮助解决您可能面临的潜在问题......现在最好先发制人,老实说,从编码的角度来看,这并不是什么大问题改变。我的经验法则是,尽可能只将最少数量的信息/数据/附加内容放在一个意图中,同时仍能达到相同的预期结果。
标签: java android arrays firebase firebase-storage