Android上传Firebase认证用户的个人资料图片
我正在尝试将图像添加到Firebase存储中,每个用户都可以从其文件或相机上载其个人资料图片,并且应该将其存储在自己的文件夹中,该文件夹的名称为uid。我有以下代码,但是按下ImageView没有任何作用:Android上传Firebase认证用户的个人资料图片,android,firebase,android-fragments,firebase-authentication,Android,Firebase,Android Fragments,Firebase Authentication,我正在尝试将图像添加到Firebase存储中,每个用户都可以从其文件或相机上载其个人资料图片,并且应该将其存储在自己的文件夹中,该文件夹的名称为uid。我有以下代码,但是按下ImageView没有任何作用: public class ProfileFragment extends Fragment { CircleImageView profileImage; TextView email; public StorageReference storageRef;
public class ProfileFragment extends Fragment {
CircleImageView profileImage;
TextView email;
public StorageReference storageRef;
FirebaseStorage storage;
public static ProfileFragment newInstance() {
ProfileFragment profileFragment = new ProfileFragment();
return profileFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_profile, container, false);
profileImage = view.findViewById(R.id.profile_image);
email = view.findViewById(R.id.email);
String user = FirebaseAuth.getInstance().getCurrentUser().getEmail();
email.setText(user);
storageRef = storage.getReference();
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
final String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
final Uri contentURI = data.getData();
profileImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(contentURI != null) {
StorageReference childRef = storageRef.child("/images/"+ userUid +".jpg");
UploadTask uploadTask = childRef.putFile(contentURI);
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(getActivity(), "Upload successful", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), "Upload Failed" + e, Toast.LENGTH_SHORT).show();
}
});
}
else {
Toast.makeText(getActivity(), "Select an image", Toast.LENGTH_SHORT).show();
}
}
});
}
}
公共类ProfileFragment扩展了片段{
圆形图像查看轮廓图像;
TextView电子邮件;
公共存储参考storageRef;
火基储存;
公共静态ProfileFragment newInstance(){
ProfileFragment=新的ProfileFragment();
返回片段;
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_外形,容器,假);
profileImage=view.findviewbyd(R.id.profile\u image);
email=view.findviewbyd(R.id.email);
字符串user=FirebaseAuth.getInstance().getCurrentUser().getEmail();
email.setText(用户);
storageRef=storage.getReference();
返回视图;
}
@凌驾
activityresult上的公共void(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
最后一个字符串userUid=FirebaseAuth.getInstance().getCurrentUser().getUid();
最终Uri contentURI=data.getData();
profileImage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(contentURI!=null){
StorageReference childRef=storageRef.child(“/images/”+userUid+”.jpg”);
UploadTask UploadTask=childRef.putFile(contentURI);
uploadTask.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
Toast.makeText(getActivity(),“上载成功”,Toast.LENGTH_SHORT.show();
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Toast.makeText(getActivity(),“上载失败”+e,Toast.LENGTH_SHORT.show();
}
});
}
否则{
Toast.makeText(getActivity(),“选择图像”,Toast.LENGTH_SHORT.show();
}
}
});
}
}
从我读到的内容来看,onActivityResult不适用于片段,但是我无法思考或找到它应该如何工作的任何主题。有人能帮我完成这项工作吗?还有,在我上传之后,我如何获取每个用户的个人资料图片?我正在使用内置的Firebase身份验证系统,包括电子邮件、Google和Facebook身份验证,我正在努力使它能够工作,而无需在数据库中额外存储用户。
提前谢谢 试试下面的代码片段: 步骤1:-在build.gradle(模块:app)文件中添加firebase存储依赖项。firebase存储的最新依赖项是:
implementation 'com.google.firebase:firebase-storage:19.1.0'
步骤2:-设置activity_main.xml布局文件
步骤3:-设置MainActivity.java文件
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageReference = storage.getReference();
private void uploadImage()
{
if (filePath != null) {
// Code for showing progressDialog while uploading
ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("Uploading...");
progressDialog.show();
// Defining the child of storageReference
StorageReferenceref=storageReference.child("images/"+UUID.randomUUID().toString();
// adding listeners on upload
// or failure of image
ref.putFile(filePath)
.addOnSuccessListener(
new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(
UploadTask.TaskSnapshot taskSnapshot)
{
// Image uploaded successfully
// Dismiss dialog
progressDialog.dismiss();
Toast
.makeText(MainActivity.this,
"Image Uploaded!!",
Toast.LENGTH_SHORT)
.show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e)
{
// Error, Image not uploaded
progressDialog.dismiss();
Toast
.makeText(MainActivity.this,
"Failed " + e.getMessage(),
Toast.LENGTH_SHORT)
.show();
}
})
.addOnProgressListener(
new OnProgressListener<UploadTask.TaskSnapshot>() {
// Progress Listener for loading
// percentage on the dialog box
@Override
public void onProgress(
UploadTask.TaskSnapshot taskSnapshot)
{
double progress
= (100.0
* taskSnapshot.getBytesTransferred()
/ taskSnapshot.getTotalByteCount());
progressDialog.setMessage(
"Uploaded "
+ (int)progress + "%");
}
});
}
}
FirebaseStorage=FirebaseStorage.getInstance();
StorageReference-StorageReference=storage.getReference();
私有void uploadImage()
{
如果(filePath!=null){
//上载时显示progressDialog的代码
ProgressDialog ProgressDialog=新建ProgressDialog(此);
progressDialog.setTitle(“上载…”);
progressDialog.show();
//定义storageReference的子级
StorageReferenceref=storageReference.child(“images/”+UUID.randomUUID().toString();
//在上载时添加侦听器
//还是形象的失败
ref.putFile(文件路径)
.addOnSuccessListener(
新建OnSuccessListener(){
@凌驾
成功时的公开无效(
UploadTask.TaskSnapshot(任务快照)
{
//已成功上载图像
//取消对话框
progressDialog.disclose();
干杯
.makeText(MainActivity.this,
“图片上传!!”,
吐司,长度(短)
.show();
}
})
.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e)
{
//错误,未上载图像
progressDialog.disclose();
干杯
.makeText(MainActivity.this,
“失败”+e.getMessage(),
吐司,长度(短)
.show();
}
})
.addOnProgressListener(
新建OnProgressListener(){
//用于加载的进度侦听器
//对话框上的百分比
@凌驾
公共工程进展(
上传任务