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

Android登录页面加载空白无报错问题求助

问题分析与解决

你的登录页面空白的核心原因有两个:

1. Activity的onCreate方法签名错误

你重写的是onCreate(Bundle savedInstanceState, PersistableBundle persistentState)重载方法,但Android系统启动Activity时默认调用的是仅包含Bundle参数的onCreate(Bundle savedInstanceState),导致你写的初始化逻辑完全没执行,页面自然无内容。

2. 未调用setContentView加载布局

即使方法签名正确,你的代码里也没有调用setContentView(R.layout.你的登录布局文件名)来关联XML布局,Activity没有视图可显示。


修正后的LoginActivity代码

public class LoginActivity extends AppCompatActivity {
    private SignInClient oneTapClient;
    private BeginSignInRequest signUpRequest;
    ImageButton googleSignInButton;
    private static final int REQ_ONE_TAP = 2;
    private final boolean showOneTapUI = true;
    String userName;
    String userDisplayName;

    // 修正方法签名,使用系统默认调用的重载
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 关键:添加布局加载代码,替换为你的登录布局文件名(比如activity_login)
        setContentView(R.layout.activity_login);
        
        Log.i("CUSTOM MESSAGE", "Hello from Login Activity");
        googleSignInButton = findViewById(R.id.google_login_button);
        oneTapClient = Identity.getSignInClient(this);
        signUpRequest = BeginSignInRequest.builder()
                .setGoogleIdTokenRequestOptions(BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
                        .setSupported(true)
                        .setServerClientId(getString(R.string.web_client_id))
                        .setFilterByAuthorizedAccounts(false)
                        .build())
                .build();

        ActivityResultLauncher<IntentSenderRequest> activityResultLauncher =
                registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
                    if (result.getResultCode() == Activity.RESULT_OK) {
                        try {
                            SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(result.getData());
                            String idToken = credential.getGoogleIdToken();
                            if (idToken != null) {
                                userName = credential.getId();
                                userDisplayName = credential.getDisplayName();
                                Toast.makeText(LoginActivity.this, "email:" + userName, Toast.LENGTH_SHORT).show();
                                Log.d("TAG", "Got ID token.");
                            }
                        } catch (ApiException e) {
                            e.printStackTrace();
                        }
                    }
                });

        googleSignInButton.setOnClickListener(v -> oneTapClient.beginSignIn(signUpRequest)
                .addOnSuccessListener(LoginActivity.this, result -> {
                    IntentSenderRequest intentSenderRequest = new IntentSenderRequest.Builder(result.getPendingIntent().getIntentSender()).build();
                    activityResultLauncher.launch(intentSenderRequest);
                })
                .addOnFailureListener(LoginActivity.this, e -> {
                    Log.d("TAG", e.getLocalizedMessage());
                }));
    }
}

额外优化建议

  • 布局里的ImageButton未设置位置属性(比如android:layout_centerInParent="true"),加载布局后按钮会默认显示在左上角,建议添加定位属性让按钮显示在合适位置。
  • 确认R.layout.activity_login与你的布局XML文件名一致,避免因文件名不匹配导致加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:07:52