2 回答
TA贡献1876条经验 获得超6个赞
有很多选择:
我会使用的最有用的方法之一是将图片上传到
Firebase Storage
. 上传它真的很容易,每当您的用户再次登录时,您都可以将文件下载到本地存储以供日常使用。另一种选择(这有点笨拙)可能是将位图的像素数组存储在 firebase 节点中。它非常快,您可以将其存储在您的 firebase 数据库中,也可以存储在您的共享首选项中。通过使用额外的压缩功能,您甚至可以增强该功能。
但是,我建议使用 firebase 存储,因为它是唯一的安全选项。所以去吧。
TA贡献1876条经验 获得超5个赞
这是对我有用的选项。首先,确保你的 firebase 正确设置了实时数据库和存储。然后在你的构建gradle中;
implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'com.squareup.picasso:picasso:2.5.2'
在更新个人资料图像的活动中,创建对图像的引用和 Firebase Storagebase 引用。还要添加这四行:
private FirebaseAuth mAuth;
private DatabaseReference UsersRef;
private CircleImageView ProfileImage;
private StorageReference UserProfileImageRef;
String currentUserID;
final static int Gallery_Pick = 1;
在您的 onCreate 方法中,包括以下代码行:
mAuth = FirebaseAuth.getInstance();
currentUserID = mAuth.getCurrentUser().getUid();
UsersRef= FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserID);
UserProfileImageRef = FirebaseStorage.getInstance().getReference().child("Profile Images");`
另外,将其添加到您的 on create 方法中。这允许用户更新他们的图片:
UsersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
if(dataSnapshot.exists())
{
if (dataSnapshot.hasChild("profileimage"))
{
String image = dataSnapshot.child("profileimage").getValue().toString();
Picasso.with(SetupActivity.this).load(image).placeholder(R.drawable.profile).into(ProfileImage);
}
else
{
Toast.makeText(SetupActivity.this, "Please select profile image first.", Toast.LENGTH_SHORT).show();
}
}
}`
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
这将允许用户从他的设备中选择不同的个人资料图像。它还将允许用户裁剪图像以适合屏幕。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==Gallery_Pick && resultCode==RESULT_OK && data!=null)
{
Uri ImageUri = data.getData();
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1, 1)
.start(this);
}
if(requestCode==CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
{
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if(resultCode == RESULT_OK)
{
loadingBar.setTitle("Profile Image");
loadingBar.setMessage("Please wait, while we updating your profile image...");
loadingBar.show();
loadingBar.setCanceledOnTouchOutside(true);
Uri resultUri = result.getUri();
StorageReference filePath = UserProfileImageRef.child(currentUserID + ".jpg");
filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull final Task<UploadTask.TaskSnapshot> task)
{
if(task.isSuccessful())
{
Toast.makeText(SetupActivity.this, "Profile Image stored successfully to Firebase storage...", Toast.LENGTH_SHORT).show();
final String downloadUrl = task.getResult().getDownloadUrl().toString();
UsersRef.child("profileimage").setValue(downloadUrl)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task)
{
if(task.isSuccessful())
{
Intent selfIntent = new Intent(SetupActivity.this, SetupActivity.class);
startActivity(selfIntent);
Toast.makeText(SetupActivity.this, "Profile Image stored to Firebase Database Successfully...", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
else
{
String message = task.getException().getMessage();
Toast.makeText(SetupActivity.this, "Error Occured: " + message, Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
});
}
}
});
}
else
{
Toast.makeText(this, "Error Occured: Image can not be cropped. Try Again.", Toast.LENGTH_SHORT).show();
loadingBar.dismiss();
}
}
}
添加回答
举报