【问题标题】:how to get an image path in firebaseStorage to firebaseDatabase如何将firebase存储中的图像路径获取到firebase数据库
【发布时间】:2020-12-09 22:22:21
【问题描述】:

大家好,每个人都在制作一个应用程序,它使用 firebaseDatabase 获取用户信息和 firebaseStorage 来保存图像,我想将上传到 firebaseStorage 的图像的路径放在用户信息下的 firebaseDatabase 中,这样我就可以像配置文件图片一样显示图像了我正在使用它来上传图像和 mainActivity 来显示图像。我确实在寻找解决方案并得到了一些解决方案,但它没有用,或者我不知道如何让它工作。我是安卓新手

上传图片

 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
                    // ...
                }
            });

}

主要活动

 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) {

        }
    });


}

}

【问题讨论】:

    标签: android firebase android-studio


    【解决方案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();
         }
      }
      

      【讨论】:

      • 我的朋友他只需要如何获取图像的答案,所以我的建议是不要为他写额外的行,因为也许他现在可能对看到你的代码感到困惑,但既然你已经写了一个完美的代码,但根据他的问题,他不需要进度条或其他任何东西,所以下次让你的答案尽可能简单
      【解决方案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
                      // ...
                  }
              });
      

      }

      【讨论】:

      • 您好,谢谢您的评论,我确实复制并粘贴了它,但在 getDownloadUrl() 上出现错误,说无法解决“StorageTask”中的方法“getDownloadUrl()”任何想法?
      • 是的,我已更改为参考更新任务,请再次复制粘贴它肯定会工作
      猜你喜欢
      • 2020-12-18
      • 2020-09-24
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 2019-05-02
      • 2019-11-07
      • 2018-02-04
      • 2021-07-12
      相关资源
      最近更新 更多