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();
? ? ? ? }
? ? }
} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
添加回答
舉報