【问题标题】:My app goes straight into the MainActivity我的应用程序直接进入 MainActivity
【发布时间】:2019-04-21 15:09:19
【问题描述】:

我正在创建一个类似于 WhatsApp 的应用程序,但我遇到了问题。该应用程序应该进入 LoginActivity 但它直接进入 MainActivity 而我没有登录。

我尝试更改 android manifest 中的启动器场景,同样的事情正在发生。我尝试在我的两个loadingBar.dismiss(); 的末尾添加mAuth.signOut();。我试着改变这个 SendUserToMainActivity(); 到这个SendUserToRegisterActivity();。我还删除了 firebase 数据库中的所有帐户。

登录活动:

private FirebaseUser currentUser;
private FirebaseAuth mAuth;
private ProgressDialog loadingBar;

private Button LoginButton, PhoneLoginButton;
private EditText UserEmail, UserPassword;
private TextView NeedNewAccountLink, ForgetPasswordLink;

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

    mAuth = FirebaseAuth.getInstance();
    currentUser = mAuth.getCurrentUser();

    InitializeFields();

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

            SendUserToRegisterActivity();

        }
    });


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

            AllowUserToLogin();

        }
    });


}

private void AllowUserToLogin() {

    String email = UserEmail.getText().toString();
    String password = UserPassword.getText().toString();

    if(TextUtils.isEmpty(email)){

        Toast.makeText(this, "Please enter your email", Toast.LENGTH_SHORT).show();
    }

    if(TextUtils.isEmpty(password)){

        Toast.makeText(this, "Please enter your password", Toast.LENGTH_SHORT).show();
    }
    else{

        loadingBar.setTitle("Logging In");
        loadingBar.setMessage("Please wait...");
        loadingBar.setCanceledOnTouchOutside(true);
        loadingBar.show();

        mAuth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {

                        if(task.isSuccessful())
                        {
                            SendUserToMainActivity();
                            Toast.makeText(LoginActivity.this, "Logged in successfully", Toast.LENGTH_SHORT).show();
                            loadingBar.dismiss();
                        }

                            else{

                                String message = task.getException().toString();
                                Toast.makeText(LoginActivity.this, "Error:" + message, Toast.LENGTH_SHORT).show();
                                loadingBar.dismiss();

                            }
                    }
                });

    }

}

private void InitializeFields() {

    LoginButton = (Button) findViewById(R.id.login_button);
    PhoneLoginButton = (Button) findViewById(R.id.phone_login_button);
    UserEmail = (EditText) findViewById(R.id.login_email);
    UserPassword = (EditText) findViewById(R.id.login_password);
    NeedNewAccountLink = (TextView) findViewById(R.id.need_new_account_link);
    ForgetPasswordLink = (TextView) findViewById(R.id.forget_password_link);
    loadingBar = new ProgressDialog(this);

}

@Override
protected void onStart() {
    super.onStart();

    if (currentUser != null){

        SendUserToMainActivity();

    }
}

private void SendUserToMainActivity() {

        Intent loginIntent = new Intent(LoginActivity.this, MainActivity.class);
        startActivity(loginIntent);
    }

private void SendUserToRegisterActivity() {

    Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
    startActivity(registerIntent);
}

AndroidManifest:

   <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:ignore="GoogleAppIndexingWarning">
    <activity android:name=".RegisterActivity" />
    <activity android:name=".LoginActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MainActivity"/>
</application>

【问题讨论】:

  • 你能出示你的清单吗?
  • OnStart fun 检查当前 user.uid!= Null 否则您将始终获得用户。

标签: java android


【解决方案1】:

清除应用程序的缓存一次,将启动器从 Main Activity 更改为 Login Activity 重建应用程序,并在 LoginActivity 的 onStart 上让用户登录,这就是他总是将您发送到 mainActivity 的原因,
不管您是否已删除 firebase 中的所有用户,您都将获得身份验证,直到您清除缓存。
试试这个解决方案,让我知道它是否适合您。

【讨论】:

  • 是的,它奏效了。我想我必须清除模拟器上的数据。非常感谢
  • 酷 :) 我很高兴它解决了问题)
  • :) @HaykMkrtchyan 他收到的用户实际上是他删除的,但在 Auth 中遇到了这就是为什么他不能坚持 LoginActivity,
  • 我明白了。 currentuser 不为空 :) 这就是我告诉进行调试的原因。他可以很快认识到问题))
  • 是的,@Chaster App 你必须在 onStart 函数中检查当前 user.uid。
【解决方案2】:

AllowUserToLogin()你必须放置一个

return;

显示带有错误消息的Toast 后的语句。
检查密码后还要删除else

if(TextUtils.isEmpty(email)){
    Toast.makeText(this, "Please enter your email", Toast.LENGTH_SHORT).show();
    return;
}

if(TextUtils.isEmpty(password)){
    Toast.makeText(this, "Please enter your password", Toast.LENGTH_SHORT).show();
    return;
}
loadingBar.setTitle("Logging In");
..................................

编辑
在您发布清单后,我看到您的 LAUNCHER 活动是 MainActivity 尽管您在问题中提到:

我尝试在 android manifest 中更改启动器场景,结果相同 事情正在发生。

您还必须将LAUNCHER 活动更改为LoginActivity

【讨论】:

  • 我只是尝试了所有这些,但没有成功。我刚刚将清单更新为目前的样子
  • 目前看起来这是错误的。将 LoginActivity 设置为 LAUNCHER 活动。交换LoginActivityMainActivity
【解决方案3】:

像这样更改你的清单。

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".RegisterActivity" />
<activity android:name=".LoginActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name=".MainActivity"/>

当打开登录活动时,检查用户是否已经登录,将他发送到 MainAcitivty。

如果您有一个方法来检查文本字段验证,那也很好。 像这样的:

public boolean verified() {
  if(TextUtils.isEmpty(email)){
    Toast.makeText(this, "Please enter your email", Toast.LENGTH_SHORT).show();
    return false;
  }

  if(TextUtils.isEmpty(password)){
      Toast.makeText(this, "Please enter your password", 
      Toast.LENGTH_SHORT).show();
   return false;
  }

 return true;
}

然后这样做:

if(verified){
    loadingBar.setTitle("Logging In");
    loadingBar.setMessage("Please wait...");
    loadingBar.setCanceledOnTouchOutside(true);
    loadingBar.show();
    //And so on.
}

【讨论】:

  • 我试过了,但没用。同样的事情正在发生
  • 所以你打开应用,它会打开 MainActivity?
  • 是的,只要我运行应用程序,我就会进入 MainActivity
  • 您能否调试您的应用程序并查看发生了什么以及为什么会发生?
  • 我不认识人))有问题。您可以尝试删除 MainAcitivty,删除与 MainActivity 相关的功能并尝试打开应用程序 :) 如果可行,您可以再次创建 MainAcitivty。如果可以的话,在 MainActivity 中显示代码:)
猜你喜欢
  • 2017-03-26
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2012-09-02
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多