【发布时间】:2016-07-20 16:07:34
【问题描述】:
您好,我正在 Firebase 中实现图像的存储上传。
我正在做的是从我的画廊中选择一张图片,然后将其显示在 ImageView 上,然后将其上传到存储中。
一切正常。但我担心的是我第一次上传图片时,我已经测试过了,大约需要一分钟才能返回下载路径。
第一次之后不到一秒钟。我的问题是我想在关闭“上传图片”活动后将该路径用于另一个 ImageViews。
这是我的代码。
我有一个选择画廊的对话框(稍后我会有 facebook 选项)
private View.OnClickListener dialogListener = new View.OnClickListener() {
@Override
public void onClick(View view) { clicked.length());
final Dialog dialog = new Dialog(EditProfileActivity.this);
dialog.setContentView(R.layout.galleryoptions);
dialog.setTitle("Gallery Options");
Button gallery = (Button) dialog.findViewById(R.id.buttonGallery);
gallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RESULT_LOAD_IMAGE);
}
});
dialog.show();
}
};
那么这里是活动结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
//GET PATHS
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
Log.d(TAG, "PICTURE PATH IN PHONE: " + picturePath);
cursor.close();
clicked = "iv_"+clicked;
int resID = getResources().getIdentifier(clicked, "id", "com.my.project");
ImageView imageView = (ImageView) findViewById(resID);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
//UPLOAD FILE TO FIREBASE
Uri file = Uri. fromFile(new File(picturePath));
String extension = file.getLastPathSegment();
extension = extension.substring(extension.lastIndexOf("."));
StorageReference riversRef = storageRef.child("images/"+ user.getUid().toString()+"/"+clicked+extension);
UploadTask uploadTask = riversRef.putFile(file);
// Register observers to listen for when the download is done or if it fails
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
Uri downloadUrl = taskSnapshot.getDownloadUrl();
Log.d(TAG, "DOWNLOAD PATH IN FIREBASE: " + downloadUrl);
}
});
}
}
第一次日志“PATH IN PHONE”和“PATH IN FIREBASE”之间的时间大约是一分钟,然后很快。问题是,您是否知道一种方式、方法或模式可以一直快速上传,而不仅仅是第二次? 或者你有什么建议?使用实时数据库而不是存储将图像存储在 Base64 中更好吗?
【问题讨论】:
标签: android firebase firebase-storage