Choy
Choy

Reputation: 482

Add image and other data through firebase auth

I want to store all the user info into firebase and pass the email and password to firebase auth and insert image to firebase, but here I get an error at taskSnapshot.getDownloadUrl().toString()); And I also not sure this is the correct way to pass user email and password to firebase auth or not

public void AddUser(final String UserEmail, final String Username, final String Password, final String PhoneNumber, final String confirmPassword, final String Address) {

    //first we encode the email into "," to enable check the firebase database
    String email = UserEmail.replace(".", ",");


    Userdatabase = FirebaseDatabase.getInstance().getReference("User").child(email);

    Log.d("UserEmail", Userdatabase.toString());

    Userdatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {

                String value = dataSnapshot.getValue(String.class);

                Log.i(TAG, "UserEmail : " + value + " Had Already Exist");

                Toasty.warning(getApplicationContext(), "The Email you use already Exist !", Toast.LENGTH_SHORT, true).show();
                return;
            }


            if (!dataSnapshot.exists()) {
                if (imageUri != null) {
                    StorageReference fileReference = storageReference.child(System.currentTimeMillis()
                            + "." + getFileExtension(imageUri));

                    mUploadTask = fileReference.putFile(imageUri)
                            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                    Handler handler = new Handler();
                                    handler.postDelayed(new Runnable() {
                                        @Override
                                        public void run() {
                                        }
                                    }, 500);

                                    Toast.makeText(Signup.this, "Register successful", Toast.LENGTH_LONG).show();

                                    final User user = new User(Address, confirmPassword, UserEmail, Password, PhoneNumber, Username,
                                            taskSnapshot.getDownloadUrl().toString());
                                    Userdatabase.setValue(user);

                                }
                            });
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            return;
        }
    });

    firebaseAuth.createUserWithEmailAndPassword(UserEmail, Password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {

            progressDialog.dismiss();

            if (!task.isSuccessful()) {
                Log.i(TAG, "Buyer FirebaseAuth Register : Fail");

                Toasty.error(getApplicationContext(), "The Email you use already Exist !", Toast.LENGTH_SHORT, true).show();

                } else {
                Log.i(TAG, "Buyer FirebaseAuth Register : Success");

                UserEmail.replace(".", ",");

                final User user = new User(Address, confirmPassword, UserEmail, Password, PhoneNumber, Username);

                Userdatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (!dataSnapshot.exists()) {
                            Userdatabase.setValue(user);
                            Log.i(TAG, "FirebaseDatabase Add Buyer : Success");
                            Toasty.success(getApplicationContext(), "Register Complete", Toast.LENGTH_SHORT, true).show();
                            }
                            }
                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {
                        Log.w(TAG, "Database Error");
                        }
                        });
                }
                }
                });
}

}

Upvotes: 1

Views: 658

Answers (1)

Lucem
Lucem

Reputation: 3082

Here is the problem taskSnapshot.getDownloadUrl().toString()

The latest Firebase Library delivers the download url by calling the upload reference in an asychronous task

Here is the complete code

private String link;

mUploadTask = fileReference.putFile(imageUri)
              .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                            fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                            @Override
                                            public void onSuccess(Uri downloadUri) {
                                                link = downloadUri.toString;
                                                Toast.makeText(Signup.this, "Register successful", Toast.LENGTH_LONG).show();
                                                final User user = new User(Address, confirmPassword, UserEmail, Password, PhoneNumber, Username,
                                                        link));
                                                Userdatabase.setValue(user);
                                            }
                                        });
                            }
                        });

Upvotes: 1

Related Questions