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

Android Studio登录后MainActivity显示用户名实现方法

登录后跨页传递用户名显示异常修复方案

核心问题根因

你的代码存在3个直接导致功能失效的问题:

  1. 登录页传参写死:跳转MainActivity时putExtra的第二个参数传入了固定字符串"username",而非用户输入的真实用户名变量,导致传递的内容永远是固定文本,不是实际登录账号。
  2. 接收页未赋值显示:MainActivity中虽然通过getStringExtra取到了传递的参数,但从未调用setText()方法将值设置到对应TextView控件上,自然不会显示内容。
  3. 冗余/错误控件查找:存在重复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:34:13