当前位置: 首页 > 知识库问答 >
问题:

Android studio按钮onclick重定向条件当用户登录和未登录时

王锐
2023-03-14

我是新的编码,请我需要在这个特定的功能的帮助,我将非常感激,如果有人可以帮助。

我在一个android studio项目上工作,在我的活动(假设活动A)我想放置一个按钮,当点击它将打开假设活动B。

我已经能够设置onclick功能,并打算在按钮单击上打开活动B。


import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;


import com.sckoolboy.premiumapp.R;

public class Login extends AppCompatActivity {
    EditText mEmail,mPassword;
    Button mCreateBtn,mLoginBtn;
    TextView forgotTextLink;
    ProgressBar progressBar;
    FirebaseAuth fAuth;
    private FirebaseAuth auth;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        auth = FirebaseAuth.getInstance();

        if (auth.getCurrentUser() != null) {
            startActivity(new Intent(Login.this, Main1.class));
            finish();
        }
        setContentView(R.layout.activity_login);

        mEmail = findViewById(R.id.Email);
        mPassword = findViewById(R.id.password);
        progressBar = findViewById(R.id.progressBar);
        fAuth = FirebaseAuth.getInstance();
        mLoginBtn = findViewById(R.id.loginBtn);
        mCreateBtn = findViewById(R.id.createText);
        forgotTextLink = findViewById(R.id.forgotPassword);


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

                String email = mEmail.getText().toString().trim();
                String password = mPassword.getText().toString().trim();

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

                if(TextUtils.isEmpty(password)){
                    mPassword.setError("PremiumKey is Required.");
                    return;
                }

                if(password.length() < 6){
                    mPassword.setError("PremiumKey not valid");
                    return;
                }

                progressBar.setVisibility(View.VISIBLE);

                // authenticate the user

                fAuth.signInWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){
                            Toast.makeText(Login.this, "Premium Successfully Unlocked", Toast.LENGTH_SHORT).show();
                            startActivity(new Intent(getApplicationContext(),Main1.class));
                        }else {
                            Toast.makeText(Login.this, "Error ! " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                        }

                    }
                });

            }
        });

        mCreateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getApplicationContext(),Register.class));
            }
        });

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

                final EditText resetMail = new EditText(v.getContext());
                final AlertDialog.Builder passwordResetDialog = new AlertDialog.Builder(v.getContext());
                passwordResetDialog.setTitle("Reset Password ?");
                passwordResetDialog.setMessage("Enter Your Email To Received Reset Link.");
                passwordResetDialog.setView(resetMail);

                passwordResetDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // extract the email and send reset link
                        String mail = resetMail.getText().toString();
                        fAuth.sendPasswordResetEmail(mail).addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                Toast.makeText(Login.this, "Reset Link Sent To Your Email.", Toast.LENGTH_SHORT).show();
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Toast.makeText(Login.this, "Error ! Reset Link is Not Sent" + e.getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        });

                    }
                });

                passwordResetDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // close the dialog
                    }
                });

                passwordResetDialog.create().show();

            }
        });


    }
}

共有1个答案

邢思淼
2023-03-14

您可以使用if块在启动不同活动之间进行切换,这取决于用户是否登录。

例如,假设loggedin是存储用户是否登录的布尔变量,button是按钮,

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(v -> {
if (loggedIn) {
    // Start ActivityB, user has logged in
    Intent intent = new Intent(/* context here */, Main1.class);
    startActivity(intent);
} else {
    // Redirect to LoginActivity, user hasn't logged in
    Intent intent = new Intent(/* context here */, Login.class);
    startActivity(intent);
}
});

和新活动的XML设计:

<!-- Root layout above..... -->
<Button
    android:text="Log in"
    android:id="@+id/button"/>
<!--Other elements below -->
 类似资料:
  • 问题内容: 我的应用看起来像: 如果用户访问/ game下的页面并没有登录,我想将他们重定向到登录页面。 如何在所有路由器中做到优雅? 问题答案: 基本思想是使用自定义组件(在下面的示例中为PrivateRoute)包装需要身份验证的路由。PrivateRoute将使用某种逻辑来确定用户是否已通过身份验证,然后确定是否通过身份验证。允许请求的路由呈现或重定向到登录页面。 在react-router

  • 我的应用程序看起来像: 如果用户访问 /game下的页面并且没有登录,我想将他们重定向到登录页面。 如何在所有路由器中以优雅的方式进行?

  • 问题内容: 我想设置我的网站,以便如果用户点击该页面并且他们已经登录,它将把他们重定向到主页。如果未登录,它将正常显示。由于登录代码内置在Django中,我该怎么做? 问题答案: 我假设你当前正在使用内置的登录视图, 或你网址中的类似内容。 你可以编写包含默认视图的登录视图。它将检查用户是否已经登录,如果已经登录则重定向,否则使用默认视图。 就像是: 当然可以相应地更改你的网址:

  • 问题内容: 我正在使用具有两种类型的用户的Django应用程序:管理员和用户。这两个都是我项目中的组,根据个人登录所属的组,我想将它们重定向到单独的页面。现在我在settings.py中有这个 这会将所有登录的用户重定向到“ admin_list”,但是该视图只能由Admins组的成员访问- 否则它将返回403。至于登录视图本身,我仅使用Django提供的视图。我已将此添加到我的主要urls.py

  • 问题内容: 我试图制作一个过滤器来阻止未登录的用户访问某些页面。为此,我使用以下方法制作了一个过滤器类 为了允许不需要用户登录的页面,我在init()中创建了一个arraylist url-list。 现在发生了一件非常奇怪的愚蠢的事情。假设我有两个页面home.jsp和dcr.jsp。当我尝试不登录而访问home.jsp时,我已成功重定向至login.jsp,但是当我尝试访问dcr.jsp时,尽

  • 我刚开始研究Spring安全,遇到了一个问题。在登录表单中输入凭据后,用户将被重定向回登录页。 下面是我配置的SecurityConfiguration.java: } 登录表单: