通过firebase auth添加图片和其他数据

Posted

技术标签:

【中文标题】通过firebase auth添加图片和其他数据【英文标题】:Add image and other data through firebase auth 【发布时间】:2019-04-07 08:05:43 【问题描述】:

我想将所有用户信息存储到 firebase 并将电子邮件和密码传递给 firebase auth 并将图像插入到 firebase,但在这里我在 taskSnapshot.getDownloadUrl().toString()); 而且我也不确定这是否是将用户电子邮件和密码传递给 firebase auth 的正确方法

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");
                        
                        );
                
                
                );

【问题讨论】:

如果您需要更多代码,请告诉我 【参考方案1】:

这里是问题taskSnapshot.getDownloadUrl().toString()

最新的 Firebase 库通过在 asychronous task 中调用上传引用来提供下载 url

这是完整的代码

私有字符串链接;

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);
                                            
                                        );
                            
                        );

【讨论】:

sry,我没听懂你,你能创建一个聊天室吗? 字符串链接 = uri.toString; uri 找不到符号 在对象类中我还需要再创建一个构造函数吗? @Choy,对不起,它的 downloadUri.toString, 好的@Choy,考虑投票并将其标记为帮助其他用户的正确答案。很高兴我帮助了

以上是关于通过firebase auth添加图片和其他数据的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Auth (android) 后在数据库中创建用户

如何在 Flutter 中使用 Firebase Auth 和 Firestore

如何观察 firebase.auth().currentUser.displayName 和其他属性的变化?

Firebase Auth:我想获取当前用户个人资料照片并将其上传到 Firebase 数据库或存储

适用于Facebook Auth和数据库的Firebase

如何通过 iOS(swift)将 Firebase Auth 与 MySQL DB 同步?