Hallo ich bin die Umsetzung der Speicher-Upload in Firebase für Bilder.Android Firebase Upload-Datei Zeit
Ich wähle ein Bild aus meiner Galerie aus, zeige es auf einem ImageView an und lade es dann auf den Speicher hoch.
Alles funktioniert. Aber mein Anliegen ist das erste Mal, dass ich ein Bild hochlade, das ich getestet habe und ungefähr eine Minute brauche, um den Download-Pfad zurückzugeben.
Nach dem ersten Mal dauert weniger als eine Sekunde. Mein Problem ist, dass ich diesen Pfad für andere ImageViews verwenden möchte, nachdem ich die Aktivität "Bild hochladen" beendet habe.
Hier ist mein Code.
ich einen Dialog haben die Galerie zu wählen (ich werde später die Facebook-Option)
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();
}
};
hier dann wird die Tätigkeit Ergebnis
@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);
}
});
}
}
Die Zeit zwischen den beiden Protokollen „PATH IN PHONE "und" PATH IN FIREBASE "ist beim ersten Mal ungefähr eine Minute, dann ist es ziemlich schnell. Die Frage ist, kennen Sie einen Weg oder eine Methode oder ein Muster, um die Geschwindigkeit die ganze Zeit und nicht nur das zweite Mal hochzuladen? Oder was schlägst du vor? ist es besser, das Bild in Base64 mit der Echtzeit-Datenbank anstelle von Speicher zu speichern?
Sinn machen, wissen Sie eine Möglichkeit, den Status von paused manuell zu ändern, um das Back-End in Firebase für diesen Fall wieder aufzunehmen? Ich bin neu in der Firebase. – Sergio
kann man das nicht tun – tyczj
hehe ok danke! – Sergio