как получить путь к изображению в firebaseStorage к FirebaseDatabase

#android #firebase #android-studio

#Android #firebase #android-studio

Вопрос:

привет всем, я создаю приложение, которое использует FirebaseDatabase для информации о пользователях и firebaseStorage для сохранения изображения, и я хочу указать путь к изображению, загруженному в firebaseStorage в FirebaseDatabase в разделе Информация о пользователе, чтобы я мог отображать изображение как фотографию профиля, поэтому я использую это для загрузки изображения и MainActivity для отображения изображения. я ищу решение и получил его, но оно не сработало, или я не знал, как заставить его работать. я новичок в Android

загрузить изображение

  public String getExtension(Uri uri) {
    ContentResolver contentResolver = getContentResolver();
    MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
    return mimeTypeMap.getMimeTypeFromExtension(contentResolver.getType(uri));
}

private void uploadImage() {
 StorageReference reference = mStorage.child(System.currentTimeMillis() "." getExtension(imageUri));


    uploadTask= reference.putFile(imageUri)
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


                    // Get a URL to the uploaded content
                   // Uri downloadUrl = taskSnapshot.getDownloadUrl();

                    Toast.makeText(AddImageActivity.this,"Image Uploaded",Toast.LENGTH_SHORT).show();

                    Intent ii = new Intent(AddImageActivity.this,MainActivity.class);
                    startActivity(ii);
                    finish();

                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle unsuccessful uploads
                    // ...
                }
            });

}
  

MainActvity

  public class MainActivity extends AppCompatActivity {
 ImageView profilePic ;
 TextView nameProfile ;
  DatabaseReference databaseReference ;
 FirebaseUser fUser;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    profilePic=findViewById(R.id.imageProfile);
    nameProfile = findViewById(R.id.nameProfile);

   fUser=FirebaseAuth.getInstance().getCurrentUser();
   databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(fUser.getUid());

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            User user = snapshot.getValue(User.class);
            nameProfile.setText(user.getName());
            Glide.with(getApplicationContext()).load(user.getImageURL()).into(profilePic);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });


}
  

}

Ответ №1:

это работает для меня

 final StorageReference reference = mStorageReference.child(System.currentTimeMillis()   "."   getExtension(imageUri));
    reference.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

            taskSnapshot.getStorage().getDownloadUrl()
                    .addOnSuccessListener(
                            new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    String imageUrl = uri.toString();
                                 
                                }
                            }
                    );
        }
    });
  

Ответ №2:

  public void uploadfile(){
   if(uri!=null){
       final StorageReference filereference=storageReference.child(System.currentTimeMillis() "." getFileExtension(uri));

       filereference.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
           @Override
           public void onSuccess(final UploadTask.TaskSnapshot taskSnapshot) {

            filereference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    Upload upload=new Upload(editText1.getText().toString(),uri.toString());
                    String str=databaseReference.push().getKey();
                    databaseReference.child(str).setValue(upload);

                    progressBar.setVisibility(View.INVISIBLE);
                    progressBar2.setVisibility(View.VISIBLE);
                    final Timer timer=new Timer();
                    TimerTask timerTask=new TimerTask() {
                        @Override
                        public void run() {
                            counter  ;
                            progressBar2.setProgress(counter);
                            if (counter==100){
                                toast.show();
                                progressBar2.setVisibility(View.INVISIBLE);
                                counter=0;
                                timer.cancel();
                            }
                        }
                    };timer.schedule(timerTask,1,15);
                }
            });
           }
       }).addOnFailureListener(new OnFailureListener() {
           @Override
           public void onFailure(@NonNull Exception e) {

           }
       });
   }
   else {
       Toast.makeText(this, "No file selected", Toast.LENGTH_SHORT).show();
   }
}
  

Комментарии:

1. Моему другу нужен только ответ о том, как получить изображение итак, я предлагаю не писать для него лишнюю строку, потому что, возможно, он сейчас и может быть смущен, увидев ваш код, но поскольку вы написали идеальный код, но, основываясь на его вопросе, ему не нужен индикатор выполнения или что-то еще, поэтому в следующий раз сделайте свой ответ как можно более простым

Ответ №3:

Привет, мой друг, пожалуйста, скопируйте и вставьте вашу функцию следующим образом

 private void uploadImage() {
   StorageReference reference = mStorage.child(System.currentTimeMillis() "." getExtension(imageUri));

uploadTask= reference.putFile(imageUri)
        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

               reference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                              @Override
                                                public void onSuccess(Uri uri) {
                                                        
                                                        String uploadedImageUrl = uri.toString();
                                                        
            // Now you have your image in (uploadedImageUrl) variable so write your code to upload in firebaseDatabase and enjoy
                                                    }
                                                });

                Toast.makeText(AddImageActivity.this,"Image Uploaded",Toast.LENGTH_SHORT).show();

                Intent ii = new Intent(AddImageActivity.this,MainActivity.class);
                startActivity(ii);
                finish();

            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle unsuccessful uploads
                // ...
            }
        });
  

}

Комментарии:

1. привет, спасибо за ваш комментарий, я скопировал его и вставил, и я получаю сообщение об ошибке в getDownloadUrl (), в котором говорится, что не удается разрешить метод «getDownloadUrl ()» в «StorageTask», есть идеи?

2. да, я изменил задачу обновления со ссылкой, пожалуйста, скопируйте и вставьте еще раз, это определенно сработает