当前位置: 首页 > 知识库问答 >
问题:

如何在firebase中添加图像名和下载url到登录用户节点[重复]

伍皓
2023-03-14
public class SecondActivity extends AppCompatActivity {
private static final int CHOOSE_IMAGE = 101;
String Database_Path = "users";
String Storage_Path = "profilepics/";
TextView textView;
private ImageView imageView;
EditText editText;
Uri uriProfileImage;
String downloadUri;
ProgressBar progressBar;
 FirebaseAuth mAuth;
String imageUrl;
Button UploadButton;


StorageReference storageReference;
DatabaseReference databaseReference;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

mAuth = FirebaseAuth.getInstance();

editText = (EditText) findViewById(R.id.editTextDisplayName);
imageView = (ImageView) findViewById(R.id.imageView);
UploadButton = (Button)findViewById(R.id.buttonSave);
progressBar = (ProgressBar) findViewById(R.id.progressbar);


storageReference = FirebaseStorage.getInstance().getReference();
databaseReference = FirebaseDatabase.getInstance().getReference(Database_Path);

progressBar = new ProgressBar(SecondActivity.this)
   imageView.setOnClickListener(new View.OnClickListener() {
         @Override
      public void onClick(View v) {
            showimagechooser();
    }
});

UploadButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        // Calling method to upload selected image on Firebase storage.

        startActivity(new Intent(SecondActivity.this, DisplayProfile.class));

    }
});
 }

private void showimagechooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select profile Image"), CHOOSE_IMAGE);

 }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == CHOOSE_IMAGE && resultCode == RESULT_OK && data != null && data.getData() != null) {
    uriProfileImage = data.getData();
    try {
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uriProfileImage);
        imageView.setImageBitmap(bitmap);
        uploadImageToFirebaseStorage(bitmap);

       } catch (IOException e) {
        e.printStackTrace();
       }
    }
 }

 private void uploadImageToFirebaseStorage(Bitmap bitmap) {
final String TempImageName = editText.getText().toString().trim();

FirebaseStorage storage = FirebaseStorage.getInstance();
final StorageReference storageRef = storage.getReference();
String userID=mAuth.getCurrentUser().getUid();
System.out.println(userID);
// this is how you set your desired name for the image
final StorageReference ImagesRef = storageRef.child("images/"+mAuth.getCurrentUser().getUid()+".jpg");


ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
byte[] data = baos.toByteArray();
final UploadTask uploadTask = ImagesRef.putBytes(data);

uploadTask.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        Log.i("whatTheFuck:",exception.toString());
    }
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>(){
                            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                            @Override
                            public void onSuccess(final UploadTask.TaskSnapshot taskSnapshot) {
                                Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                                    @Override
                                    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) {
                                        if (!task.isSuccessful()) {
                                            Log.i("problem", task.getException().toString());
                                        }

                                        return ImagesRef.getDownloadUrl();
                                    }
                                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Uri> task) {
                                        if (task.isSuccessful()) {
                                            Uri downloadUri = task.getResult();

                                            DatabaseReference ref = FirebaseDatabase.getInstance().getReference("users").child(mAuth.getCurrentUser().getUid());
                                            ref.child("imageURL").setValue(downloadUri.toString());
                                            ref.child("imageName").setValue(TempImageName);


                                        } else {
                                            Log.i("wentWrong","downloadUri failure");
                                        }
                                    }
                                });
                            }
});

 }
 }

提前致谢

共有1个答案

计承德
2023-03-14
java prettyprint-override">private void uploadFile(Bitmap bitmap) {

        FirebaseStorage storage = FirebaseStorage.getInstance();
        final StorageReference storageRef = storage.getReference();

         // this is how you set your desired name for the image
        final StorageReference ImagesRef = storageRef.child("images/"+mAu.getCurrentUser().getUid()+".jpg");


        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
        byte[] data = baos.toByteArray();
        final UploadTask uploadTask = ImagesRef.putBytes(data);

        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                Log.i("whatTheFuck:",exception.toString());
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onSuccess(final UploadTask.TaskSnapshot taskSnapshot) {
               // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.

                Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                    @Override
                    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) {
                        if (!task.isSuccessful()) {
                            Log.i("problem", task.getException().toString());
                        }

                        return ImagesRef.getDownloadUrl(); 
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        if (task.isSuccessful()) {
                            Uri downloadUri = task.getResult();

                            DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users").child(mAu.getCurrentUser().getUid());


                            Log.i("seeThisUri", downloadUri.toString());// This is the link or name you should use to save or set the image

                            ref.child("imageURL").setValue(downloadUri.toString());


                        } else {
                            Log.i("wentWrong","downloadUri failure");
                        }
                    }
                });
             }
        });

    }
 类似资料:
  • Firebase存储电子邮件和密码。 我需要在注册中添加用户名。 我还需要使用用户名/密码而不是电子邮件/密码对(登录)用户进行身份验证。 注册应包含用户名、电子邮件和密码。。。 而登录时应使用用户名和密码。 注册Activity.java } 后勤活动。Java语言

  • 你好,我正在angular、firebase和ionic中制作一个应用程序。我在我的应用程序中使用了登录启动器,我希望我的应用程序使用用户名、电子邮件和密码进行注册。我需要用户名,以便稍后在应用程序中输入Hello[用户名]。我可以选择在物业注册firebase。createUserWithEmailAndPassword(电子邮件,密码)此属性仅允许注册电子邮件和密码,如何为username添加

  • 我最近才开始使用firebase工作,我似乎不知道如何让用户用电子邮件、用户名和密码注册,这样以后用户就可以只用用户名和密码登录,我可以用电子邮件和密码登录,但我不知道如何用用户名和密码登录,简单的解释是赞赏的,因为我是新的,谢谢!

  • 问题内容: 我想从我的应用程序中的URL加载图像,因此我首先尝试使用Objective-C,但是它可以正常工作,但是对于Swift,我遇到了编译错误: ‘imageWithData’不可用:使用对象构造’UIImage(data :)’ 我的功能: 在Objective-C中: 有人可以解释一下为什么Swift无法使用它,以及如何解决该问题。 问题答案: Xcode 8或更高版本•Swift 3或

  • 问题内容: 我遵守规则 它将URL 重定向到。页面成功重定向,但问题未加载, CSS,js文件位于和下 一种解决方案是使用 绝对路径 (例如/ CSS或/ js而不是CSS /,/ js,但这似乎不是一个可靠的解决方案,因为我们必须在所有文件上进行更改, 是否有其他基于规则的解决方案,这些解决方案独立于编辑所有PHP文件并让我们使用“相对路径”? 问题答案: 不要偷懒,将资源中的相对URI更改为根

  • 问题内容: 我正在尝试使用我的应用程序中的URL和按钮下载图像。当我在手机上运行它时,我无法下载该图像。任何人都可以指出这个问题。我在这里先向您的帮助表示感谢 :) 这是我的代码。 问题答案: 您可以通过两种方式从url下载图像 1。您 可以使用Glide库从url加载图像,看下面的代码,它可以轻松地为您提供帮助 编译这个库 而不是像这样加载图像 2。如果您不想使用第三方库,请尝试此 创建一个异步