Привет Я реализую загрузку хранилища в firebase для изображений.Android 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 в телефоне »и« PATH IN FIREBASE »происходит примерно через минуту в первый раз, а затем довольно быстро. Вопрос в том, знаете ли вы способ, метод или шаблон, чтобы скорость была загружена все время, а не только второй раз? Или что вы предлагаете? лучше ли сохранять изображение в Base64, используя базу данных реального времени вместо хранения?
иметь смысл, знаете ли вы способ вручную изменить состояние из паузы, чтобы возобновить бэкэнд в firebase для этого случая? Я новичок в firebase. – Sergio
вы не можете это сделать – tyczj
hehe ok спасибо! – Sergio