Android Studio登录后MainActivity显示用户名实现方法
登录后跨页传递用户名显示异常修复方案
核心问题根因
你的代码存在3个直接导致功能失效的问题:
- 登录页传参写死:跳转MainActivity时
putExtra的第二个参数传入了固定字符串"username",而非用户输入的真实用户名变量,导致传递的内容永远是固定文本,不是实际登录账号。 - 接收页未赋值显示:MainActivity中虽然通过
getStringExtra取到了传递的参数,但从未调用setText()方法将值设置到对应TextView控件上,自然不会显示内容。 - 冗余/错误控件查找:存在重复
findViewById查找同一用户名控件的代码,如果你的用户名控件位于NavigationView侧滑菜单头部布局中,直接通过Activity的findViewById根本无法获取到控件实例,会导致空指针或者设置不生效。
分步修复代码
1. 修改Login页面传参逻辑
找到登录成功后的跳转代码块,替换为以下正确写法:
if (result.equals("Login Success")){ Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(Login.this, MainActivity.class); // 修复点:传入实际存储用户输入的username变量,而非固定字符串 intent.putExtra("username", username); startActivity(intent); finish(); }
2. 修改MainActivity接收与显示逻辑
根据你的用户名控件所在位置,选择对应实现:
场景A:用户名控件在activity_main主布局(非侧滑头)
在setContentView之后添加控件赋值逻辑,删除重复的控件查找代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sliderView = findViewById(R.id.image_slider); // 单次查找用户名控件即可,删除后续重复的findViewById(R.id.usernamelog)代码 TextView usernameTv = findViewById(R.id.usernamelog); // 接收传递参数,增加空判断避免崩溃 String loginUsername = getIntent().getStringExtra("username"); if (loginUsername != null && !loginUsername.trim().isEmpty()) { usernameTv.setText(loginUsername); } // 以下原有Toolbar、侧滑菜单、按钮点击、轮播图逻辑保持不变即可 Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setTitle("Home "); getSupportActionBar().setDisplayHomeAsUpEnabled(true); setUpToolbar(); // ... 剩余原有代码无需改动
场景B:用户名控件在NavigationView侧滑菜单头部布局
如果usernamelog是写在侧滑菜单的header布局文件中,需要通过NavigationView实例获取头部视图后再查找控件,代码如下:
navigationView = (NavigationView) findViewById(R.id.navigation_menu); // 获取侧滑菜单第0个头部视图 View navHeader = navigationView.getHeaderView(0); TextView navUsernameTv = navHeader.findViewById(R.id.usernamelog); String loginUsername = getIntent().getStringExtra("username"); if (loginUsername != null && !loginUsername.trim().isEmpty()) { navUsernameTv.setText(loginUsername); }
上架前优化建议
- 当前网络请求直接通过Handler post到主线程执行,网络较差时容易触发ANR崩溃,建议后续替换为Retrofit+协程的异步网络请求方案。
- 若需要全局使用登录用户名,不要仅依赖Intent传参,可在登录成功后将用户名存入
SharedPreferences,避免页面重建、跳转时丢失参数,也减少重复传参代码。
内容的提问来源于stack exchange,提问作者Iradukunda Reyanne
相关产品推荐
相关产品推荐

