如何在使用Firebase Auth注册用户时保存用户的UID

时间:2020-05-03 14:35:44

标签: android firebase firebase-realtime-database firebase-authentication uid

我正在尝试使用Firebase身份验证注册用户时保存用户的UID。

在这里,我已经将用户UID作为数据库中的键推送了,因为我需要插入与数据相同的UID

package com.example.loginregistration;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.DialogFragment;

import android.app.DatePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
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.rengwuxian.materialedittext.MaterialEditText;

import java.text.DateFormat;
import java.util.Calendar;

public class AddEmployee extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {

    MaterialEditText Username, email, password, mobile, dob, job, department;
    RadioButton radio_male,radio_female,radio_admin,radio_user;
    ImageView date;
    Button register;
    TextView LoginBtn;
    FirebaseAuth fAuth;
    FirebaseUser FirebaseUser;
    DatabaseReference reff;
    Employee Employee;
    String currentDateString;
    long maxid=0;
    String user,id;
    Spinner spinner;
    String txtGender = "",txtUserName="", txtRole="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_employee);


        Username = findViewById(R.id.username);
        email = findViewById(R.id.email);
        password = findViewById(R.id.password);
        //dob = findViewById(R.id.dob);
        job = findViewById(R.id.jobtitle);
        department = findViewById(R.id.department);
        mobile = findViewById(R.id.mobile);

        radio_male = findViewById(R.id.male);
        radio_female = findViewById(R.id.female);
        radio_admin = findViewById(R.id.Admin);
        radio_user = findViewById(R.id.User);

        register = findViewById(R.id.register);
        spinner = findViewById(R.id.spinner);
        //LoginBtn = findViewById(R.id.createText);
        Employee= new Employee();

        date = findViewById(R.id.date);
        date.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DialogFragment datePicker = new DatePickerFragment();
                datePicker.show(getSupportFragmentManager(), "date picker");
            }
        });

        fAuth = FirebaseAuth.getInstance();

        reff = FirebaseDatabase.getInstance().getReference("Employee");

        reff.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
              // if (dataSnapshot.exists())
                   // user = (dataSnapshot.getKey());
                //Log.e("User", user);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });



        /*if (fAuth.getCurrentUser() != null){
            startActivity(new Intent(getApplicationContext(),AppStartActivity.class));
            finish();
        }*/

        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String txtUserName = Username.getText().toString();
                String txtEmail = email.getText().toString().trim();
                String txtPassword = password.getText().toString().trim();
                String txtMobile = mobile.getText().toString();
                String txtJob = job.getText().toString().trim();
                String txtDepatment = department.getText().toString();
              //String txtDob = dob.getText().toString().trim();
                String job = spinner.getSelectedItem().toString().trim();

                String id = reff.push().getKey();
                Log.e("id",id);


                if(radio_male.isChecked()){
                    txtGender="Male";
                }

                if(radio_female.isChecked()){
                    txtGender="Female";
                }

                if(radio_admin.isChecked()){
                    txtRole="1";
                }

                if(radio_user.isChecked()){
                    txtRole="0";
                }


                //reff.child(String.valueOf(maxid+1)).setValue(Employee);
               // reff.child(txtUserName).setValue(Employee);

                Toast.makeText(AddEmployee.this,"Data inserted successfully",Toast.LENGTH_LONG).show();


                if (TextUtils.isEmpty(txtEmail)){
                    email.setError("Email is Required.");
                    return;
                }

                if (TextUtils.isEmpty(txtPassword)){
                    password.setError("Password is Required.");
                    return;

                }

                if (password.length() < 6){

                    password.setError("Password must be more than 6 characters.");
                    return;

                }

                fAuth.createUserWithEmailAndPassword(txtEmail,txtPassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()){

                            FirebaseUser = fAuth.getCurrentUser();
                            user = FirebaseUser.getUid();
                            //Log.e("id", user);
                            reff.child(user).setValue(Employee);



                            Toast.makeText(AddEmployee.this,"User Created.",Toast.LENGTH_SHORT).show();
                            startActivity(new Intent(getApplicationContext(),AppStartActivity.class));
                        }

                        else{
                            Toast.makeText(AddEmployee.this,"Error ! " + task.getException().getMessage(),Toast.LENGTH_SHORT).show();
                        }

                    }
                });


                //id = user;
                //Log.e("id",id);

                Employee.setEmail(txtEmail);
                Employee.setPassword(txtPassword);
                Employee.setUsername(txtUserName);
                Employee.setMobile(txtMobile);
                Employee.setJob(job);
                Employee.setDepatment(txtDepatment);
                Employee.setDob(currentDateString);
                Employee.setGender(txtGender);
                Employee.setRole(txtRole);
                Employee.setId(id);


            }
        });

    }
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth){
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, dayOfMonth);

        currentDateString = DateFormat.getDateInstance(DateFormat.DEFAULT).format(c.getTime());

        TextView textView = (TextView) findViewById(R.id.dob);

        textView.setText(currentDateString);


    }
}

这是我的数据库结构。enter image description here

在这里,我要将UID保存在数据库中,这是我无法从Firebase的具体方法中获得的。

如果我在oncreate内的函数中提供保存数据但未保存,则能够获取UID但无法保存数据。在oncreate im numable之外单独保存UID。

1 个答案:

答案 0 :(得分:2)

您没有设置用户的UID。您正在使用数据库ID。

请替换以下行:

Employee.setId(id)

与此:

Employee.setId(userUID);

这里userUID将是fAuth.getCureentUser()。getUID(); 另外,您将需要将少量变量转换为final,因为您将在另一个类中使用它。 Android Studio会让您知道这一点。

现在它上传用户UID:-)

为此,请先将您的“员工”设置器移至task.isSuccessful(),然后它应该可以正常工作。