【发布时间】:2020-04-27 14:17:04
【问题描述】:
我正在为 Android 重新编程/复制 whatsapp,但遇到了问题。
在我的应用中,用户必须自己注册才能使用它。注册后,用户将被定向到 MainActivity,他们可以在其中开始与朋友聊天或完成他们的个人资料。用户可以登录到应用程序,但前提是他们必须注销。注册后无需登录。
我在应用上使用 Firebase 技术、Firebase 身份验证、Firebas 数据库、Firebase 存储。当用户完成注册后,他的信息将存储在实时数据库中。
这是我注册自己的问题,我没有直接进入 MainActivity,而是被定向到 LoginActivity,只有在以下情况下才会发生这种情况 当前用户为空。如果 currentUser 为 null,则意味着 FirebasAuth.getCurrentUser() 返回 null。
我想了解为什么会这样?为什么我的 currentUser 变量在我几秒钟前注册时为空?为什么是FirebasAuth.getCurrentUser()
当我可以看到我的信息存储在 Firebase 数据库中时返回 null?
RegisterActivity 的代码如下:
public class RegisterActivity extends AppCompatActivity {
private Button createUser;
private EditText registerEmail, registerPassword;
private TextView haveAccount;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;
private ProgressDialog loadingBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
mAuth=FirebaseAuth.getInstance();
RootRef= FirebaseDatabase.getInstance().getReference();
initializeFields();
haveAccount.setClickable(true);
haveAccount.setFocusable(true);
haveAccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SendUserToLoginActivity();
}
});
createUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createNewAccount();
}
});
}
private void createNewAccount() {
final String email=registerEmail.getText().toString();
String password=registerPassword.getText().toString();
if (TextUtils.isEmpty(email))
Toast.makeText(this,"Please enter an address mail to create an account",Toast.LENGTH_LONG).show();
if (TextUtils.isEmpty(password)) {
Toast.makeText(this, "Please enter an address mail to create an account", Toast.LENGTH_LONG).show();
} else {
loadingBar.setTitle("Create new Account");
loadingBar.setMessage("Please wait, while we creating account for you");
loadingBar.setCanceledOnTouchOutside(true);
loadingBar.show();
mAuth=new FirebaseAuth(FirebaseApp.initializeApp(RegisterActivity.this));
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task)
{
if (task.isSuccessful()) {
String currentUserID=mAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).setValue(email);
SendUserToMainActivity();
Toast.makeText(RegisterActivity.this, "Your account is created successfully", Toast.LENGTH_LONG).show();
loadingBar.dismiss();
}
else {
String message=task.getException().toString();
Toast.makeText(RegisterActivity.this,"Error " + message,Toast.LENGTH_LONG).show();
loadingBar.dismiss();
}
}
});
}
}
private void initializeFields() {
createUser=findViewById(R.id.register_button);
registerEmail=findViewById(R.id.register_email);
registerPassword=findViewById(R.id.register_password);
haveAccount=findViewById(R.id.already_have_account_link);
loadingBar= new ProgressDialog(this);
}
private void SendUserToLoginActivity() {
StartActivity(RegisterActivity.this,LoginActivity.class);
}
private void SendUserToMainActivity() {
StartActivity(RegisterActivity.this,MainActivity.class);
}
private void StartActivity(Context c, Class<?> activity){
Intent i=new Intent(c,activity);
if(activity.equals(MainActivity.class)) {
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
finish();
} else
startActivity(i);
}
这是我的 MainActivity 的代码
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;
private ViewPager myViewPager;
private TabLayout myTabLayout;
private TabsAccessorAdapter myTabsAccessorAdapter;
private FirebaseUser currentUser;
private FirebaseAuth mAuth;
private DatabaseReference RootRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
RootRef= FirebaseDatabase.getInstance().getReference();
mToolbar=findViewById(R.id.main_page_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle("WhatsApp");
myViewPager=findViewById(R.id.main_tabs_pager);
myTabsAccessorAdapter=new TabsAccessorAdapter(getSupportFragmentManager());
myViewPager.setAdapter(myTabsAccessorAdapter);
myTabLayout = findViewById(R.id.main_tabs);
myTabLayout.setupWithViewPager(myViewPager);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.options_menu,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId()==R.id.main_find_friends_option){
}
if (item.getItemId()==R.id.main_create_group_option){
requestNewGroup();
}
if (item.getItemId()==R.id.main_settings_option){
SendUserToSettingsActivity();
}
if (item.getItemId()==R.id.main_logout_option){
mAuth.signOut();
SendUserToLoginActivity();
}
return true;
}
@Override
protected void onStart() {
super.onStart();
currentUser = mAuth.getCurrentUser();
if(currentUser==null)
SendUserToLoginActivity();
else
verifyUserID();
}
private void SendUserToLoginActivity() {
StartActivity(MainActivity.this,LoginActivity.class);
}
private void StartActivity(Context c, Class<?> activity){
Intent i=new Intent(c,activity);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
finish();
}
【问题讨论】:
标签: android firebase-realtime-database firebase-authentication