如何从Firebase上传用户图像

问题描述 投票:0回答:1

我不确定如何从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!")

        }
ios swift firebase-realtime-database
1个回答
0
投票

此代码将从画廊获取您的图像,裁剪该图像并将其存储在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();
                }
            }
        }

    }
© www.soinside.com 2019 - 2024. All rights reserved.