我正在尝试将图像添加到Firebase存储中,每个用户都可以从该文件或相机中上传其个人资料图片,并且该图片应该存储在以uid为名称的自己的文件夹中。我有以下代码,但是按ImageView不会执行任何操作:
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();
}
}
});
}
}
根据我的阅读,onActivityResult不适用于片段,但是我无法思考或找到任何有关如何完成工作的主题。有人可以帮我完成这项工作吗?此外,上传后如何获取每个用户的个人资料图片?我正在使用带有电子邮件,谷歌和Facebook身份验证的内置Firebase身份验证系统,并且正在尝试使其在不将用户另外存储在数据库中的情况下正常运行。 预先感谢!
答案 0 :(得分:0)
在以下代码段中尝试以下内容:
步骤1:-在build.gradle(Module: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 + "%");
}
});
}
}