You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中登录与主页面跳转异常,陷入登录循环求助

俄罗斯方块登录系统跳转循环及无响应问题排查

我正在为俄罗斯方块实现前置登录系统,数据库已创建且功能正常,但在MainActivity调用登录页面时出现两个问题:

  1. 程序启动后加载登录页,完成注册后点击登录会跳转到登录验证页面LoginActivity2,始终无法进入游戏,陷入登录循环。
  2. 尝试将MainActivity的isLoggedIn()固定返回true后,模拟器在登录页点击登录按钮完全无响应。

相关代码片段

MainActivity 关键代码

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

    if (!isLoggedIn()) {
        Intent intent = new Intent(this, LoginActivity.class);
        startActivity(intent);
        finish(); // Optional gej bodjiin
    } else {
        setContentView(R.layout.activity_main);
    }
}

LoginActivity 关键代码

@Override
protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //There may be an error at R. I imported something weird from the suggestions
    setContentView(R.layout.login);

    username = (EditText) findViewById(R.id.username);
    password = (EditText) findViewById(R.id.password);
    submit = (Button) findViewById(R.id.submit);
    reg = (Button) findViewById(R.id.reg);
    DB = new DBHelper(this);

    reg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String user = username.getText().toString();
            String pass = password.getText().toString();
            if (user.equals("")||pass.equals(""))
                Toast.makeText(LoginActivity.this,"Enter all",Toast.LENGTH_SHORT);
            else {
                Boolean checkuser = DB.checkusername(user);
                if(checkuser==false){
                    Boolean insert = DB.insertData(user,pass);
                    if(insert==true){
                        Toast.makeText(LoginActivity.this,"Registered Successfully",Toast.LENGTH_SHORT).show();
                        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                        startActivity(intent);
                    } else {
                        Toast.makeText(LoginActivity.this,"Fail",Toast.LENGTH_SHORT).show();
                    }
                }
                else {
                    Toast.makeText(LoginActivity.this,"User exists",Toast.LENGTH_SHORT).show();
                }
            }
        }
    });

    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view){
            Intent intent = new Intent(getApplicationContext(), LoginActivity2.class);
            startActivity(intent);
        }
    });
}

LoginActivity2 关键代码

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

    username = (EditText) findViewById(R.id.username1);
    password = (EditText) findViewById(R.id.password1);
    submit = (Button) findViewById(R.id.submit1);
    DB = new DBHelper(this);

    submit.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            String user = username.getText().toString();
            String pass = password.getText().toString();

            if(user.equals("")||pass.equals(""))
                Toast.makeText(LoginActivity2.this,"Empty field",Toast.LENGTH_SHORT).show();
            else {
                Boolean checkuserpass = DB.checkusernamepassword(user,pass);
                if(checkuserpass==true){
                    Toast.makeText(LoginActivity2.this,"Success",Toast.LENGTH_SHORT).show();

                    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                    loginUser();
                    startActivity(intent);
                }
                else{
                    Toast.makeText(LoginActivity2.this,"Invalid Credentials",Toast.LENGTH_SHORT).show();
                }
            }
        }
    });
}

问题原因及修复方案

1. 登录循环问题

  • 核心原因:登录验证通过后跳转到MainActivity,但isLoggedIn()未正确读取到用户已登录的状态(比如未用SharedPreferences存储登录标记),导致MainActivity再次启动LoginActivity,形成循环。
  • 修复步骤:
    • 完善loginUser()方法:用SharedPreferences存储登录状态(比如存入is_login = true和当前用户名)。
    • 修正isLoggedIn()逻辑:读取SharedPreferences中的登录标记,正确返回true或false。
    • 删除MainActivity中else分支的冗余代码:已经调用过setContentView(R.layout.activity_main),无需重复执行。

2. 固定isLoggedIn()为true后无响应问题

  • 核心原因:LoginActivity2的布局文件activity_login中,可能不存在username1、password1、submit1这三个ID,导致按钮绑定失败,点击无响应;或者任务栈冲突导致页面跳转异常。
  • 修复步骤:
    • 核对activity_login.xml中的组件ID,确保和LoginActivity2中findViewById的ID完全匹配。
    • 注册成功后直接标记登录状态:在LoginActivity的注册成功回调中,先调用loginUser()更新登录状态,再跳转到MainActivity,避免重复走登录流程。

其他细节修复

  • 补全Toast的.show()方法:LoginActivity中空输入判断的Toast缺少.show(),导致用户看不到提示,需修正为Toast.makeText(...).show()。
  • 优化Intent上下文:使用当前Activity的this代替getApplicationContext(),避免上下文不匹配引发的跳转异常。

内容的提问来源于stack exchange,提问作者ari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:33:19