Android Studio中登录与主页面跳转异常,陷入登录循环求助
俄罗斯方块登录系统跳转循环及无响应问题排查
我正在为俄罗斯方块实现前置登录系统,数据库已创建且功能正常,但在MainActivity调用登录页面时出现两个问题:
- 程序启动后加载登录页,完成注册后点击登录会跳转到登录验证页面
LoginActivity2,始终无法进入游戏,陷入登录循环。 - 尝试将
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
相关产品推荐
相关产品推荐

