我不确定如何从Firebase数据库上载用户图像。我一直在使用此代码上传用户图片,但它不会更新用户个人资料。
如何解决此代码以从Firebase数据库上载ProfileImage?
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9KZjYyVS5wbmcifQ==” alt =“来自Firebase数据库的ProfileImage?”>
self.databaseRef.child("users/\(user?.uid)/profile image url").setValue(self.ProfileImage.image)
let profileurl = self.databaseRef.url
self.databaseRef.child("users").child("ProfileImageUrl").observeSingleEvent(of: .value, with: { (snapshot) in
// Get user value
let value = snapshot.value as? NSDictionary
let profileimage = value?["profileimage "] as? String ?? ""
self.databaseRef.child("users").child(user!.uid).setValue(["ProfileImageUrl": profileimage]) {
(error:Error?, ref:DatabaseReference) in
if let error = error {
print("Data could not be saved: \(error).")
} else {
print("Data saved successfully!")
}
此代码将从画廊获取您的图像,裁剪该图像并将其存储在Firebase存储器以及实时数据库中,然后进行获取。每次更改个人资料照片时,它都会对其进行更新。
First add these dependencies
implementation 'de.hdodenhof:circleimageview:3.1.0'
api 'com.theartofdev.edmodo:android-image-cropper:2.8.+'
implementation 'com.squareup.picasso:picasso:2.71828'
then paste it in your class (Please note there might be error come of decleration )
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;
import com.theartofdev.edmodo.cropper.CropImage;
import java.util.HashMap;
import de.hdodenhof.circleimageview.CircleImageView;
public class Account extends AppCompatActivity {
private CircleImageView imageView;
final int pick=1;
StorageReference storage;
DatabaseReference databaseReference;
FirebaseUser user;
String email;
String newuri,id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_account);
imageView=findViewById(R.id.profile_image);
databaseReference=FirebaseDatabase.getInstance().getReference().child("user");
user=FirebaseAuth.getInstance().getCurrentUser();
email=user.getEmailAddress();
databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){
String image=dataSnapshot1.child("ProfileImageUrl").getValue().toString();
if (dataSnapshot1.child("email").getValue().toString().equals(email)){
id=dataSnapshot1.getKey();
if(!image.equals("null")){
Picasso.get().load(image).into(imageView);}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent gallery=new Intent();
gallery.setType("image/*");
gallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(gallery,pick);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode==RESULT_OK && requestCode==pick && data!=null){
Uri image=data.getData();
CropImage.activity(image)
.start(this);
}
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
Uri resultUri = result.getUri();
storage=FirebaseStorage.getInstance().getReference().child("ProfileImageUrl");
storage.child(id).putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
task.getResult().getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(final Uri uri) {
databaseReference.child(id).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
HashMap<String,Object> hashMap=new HashMap<>();
newuri=uri.toString();
hashMap.put(id+"/ProfileImageUrl",newuri);
databaseReference.updateChildren(hashMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@ Overridepublic void onSuccess(Void aVoid){
Picasso.get().load(newuri).into(imageView);
Toast.makeText(Account.this, "Profile Pic Update Successfully!", Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.w("databaseerror",databaseError.toString());
}
});
}
});
}
});
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}
}