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

Android应用医生注册页面布局不显示问题求助

医生注册页面布局无法显示问题排查

我正在Android Studio中使用Java开发一款症状检查应用,启动应用后用户需选择创建患者账号或医生账号。患者注册页面运行时可正常显示,但选择医生账号选项时,对应的DoctorRegistrationActivity布局无法显示。奇怪的是代码无任何报错,Logcat也显示运行流程完全正常。

相关代码

DoctorRegistrationActivity.java

package com.example.jeusain;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;

public class DoctorRegistrationActivity extends AppCompatActivity {

    private TextView goToLogin;
    private Button doctorRegisterButton;
    private EditText doctor_name, university, placeofpractice, medicalregistrationnumber, doctor_email, doctor_password;

    //firebase initialisation

    private FirebaseAuth mAuth;
    private FirebaseAuth mUser;
    private DatabaseReference reference;

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

        doctorRegisterButton = findViewById(R.id.doctor_registerbutton_page1);
        doctor_name = findViewById(R.id.doctor_fullname);
        university = findViewById(R.id.graduated_uni);
        placeofpractice = findViewById(R.id.place_of_practice);
        medicalregistrationnumber = findViewById(R.id.registration_number);
        doctor_email = findViewById(R.id.doctor_email);
        doctor_password = findViewById(R.id.doctor_password);
        goToLogin = findViewById(R.id.loginFromDoctor);

        mAuth = FirebaseAuth.getInstance();

        if (mAuth.getCurrentUser() != null){
            startActivity(new Intent(getApplicationContext(),DoctorProfileActivity.class));
            finish();
        }

        doctorRegisterButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                performValidations();
                Intent goToLogin = new Intent(DoctorRegistrationActivity.this, LoginActivity.class);
                startActivity(goToLogin);
            }
        });
        goToLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                openLogin();
            }
        });
    }


    public void openLogin(){
        Intent login = new Intent(DoctorRegistrationActivity.this, LoginActivity.class);
        startActivity(login);
    }

    private void performValidations(){

        String getDoctorname = doctor_name.getText().toString();
        String getUniversity = university.getText().toString();
        String getPlaceofPractice = placeofpractice.getText().toString();
        String getMedicalregistrationnumber = medicalregistrationnumber.getText().toString();
        String getDoctoremail = doctor_email.getText().toString();
        String getDoctorpassword = doctor_password.getText().toString();

        if (TextUtils.isEmpty(getDoctorname)){
            doctor_name.setError("Name is required!");
            return;
        }

        if (TextUtils.isEmpty(getUniversity)){
            university.setError("University is required!");
            return;
        }

        if (TextUtils.isEmpty(getPlaceofPractice)){
            placeofpractice.setError("Place of Practice is required!");
            return;
        }

        if (TextUtils.isEmpty(getMedicalregistrationnumber)){
            medicalregistrationnumber.setError("Medical registration number is required!");
            return;
        }

        if (TextUtils.isEmpty(getDoctoremail)){
            doctor_email.setError("Email is required!");
            return;
        }

        if (TextUtils.isEmpty(getDoctorpassword)){
            doctor_password.setError("Password is required!");
            return;
        }

        if (doctor_password.length()<8){
            doctor_password.setError("Password must be 8 or more characters!");
            return;
        }

        //register the user in firebase

        mAuth.createUserWithEmailAndPassword(getDoctoremail, getDoctorpassword).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()){
                    Toast.makeText(DoctorRegistrationActivity.this, "User Created!", Toast.LENGTH_SHORT).show();
                    startActivity(new Intent(getApplicationContext(),DoctorProfileActivity.class));
                }
                else{
                    Toast.makeText(DoctorRegistrationActivity.this, "Error!" + task.getException().getMessage(), Toast.LENGTH_SHORT).show();

                }

            }
        });
    }
}

activity_doctor_registration.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#a0db8e"
    tools:context=".DoctorRegistrationActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="16dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="16dp"
        android:background="@drawable/oval_background_shape"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/title_DRP_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"

                android:layout_marginTop="24dp"
                android:gravity="center"
                android:text="You're a registered medical practitioner?"
                android:textColor="@color/black"
                android:textSize="24sp"
                android:textStyle="bold"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <TextView
                android:id="@+id/subtitle_DRP1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:gravity="center"
                android:text="Please fill in the form with relevant information"
                android:textSize="20sp"
                app:layout_constraintEnd_toEndOf="@+id/title_DRP_1"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/title_DRP_1" />

            <EditText
                android:id="@+id/doctor_fullname"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:ems="10"
                android:hint="Name"
                android:inputType="textPersonName"
                android:minHeight="48dp"
                app:layout_constraintEnd_toEndOf="@+id/subtitle_DRP1"
                app:layout_constraintStart_toStartOf="@+id/subtitle_DRP1"
                app:layout_constraintTop_toBottomOf="@+id/subtitle_DRP1" />

            <EditText
                android:id="@+id/graduated_uni"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:ems="10"
                android:hint="Graduated university"
                android:inputType="textPersonName"
                android:minHeight="48dp"
                app:layout_constraintEnd_toEndOf="@+id/doctor_fullname"
                app:layout_constraintStart_toStartOf="@+id/doctor_fullname"
                app:layout_constraintTop_toBottomOf="@+id/doctor_fullname" />

            <EditText
                android:id="@+id/place_of_practice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:ems="10"
                android:hint="Place of Practice"
                android:inputType="textPersonName"
                android:minHeight="48dp"
                app:layout_constraintEnd_toEndOf="@+id/graduated_uni"
                app:layout_constraintStart_toStartOf="@+id/graduated_uni"
                app:layout_constraintTop_toBottomOf="@+id/graduated_uni" />

            <EditText
                android:id="@+id/registration_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:ems="10"
                android:hint="Medical Registration Number"
                android:inputType="number"
                android:minHeight="48dp"
                app:layout_constraintEnd_toEndOf="@+id/place_of_practice"
                app:layout_constraintStart_toStartOf="@+id/place_of_practice"
                app:layout_constraintTop_toBottomOf="@+id/place_of_practice" />

            <EditText
                android:id="@+id/doctor_email"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:ems="10"
                android:hint="E-mail address"
                android:inputType="textEmailAddress"
                android:minHeight="48dp"
                app:layout_constraintEnd_toEndOf="@+id/registration_number"
                app:layout_constraintStart_toStartOf="@+id/registration_number"
                app:layout_constraintTop_toBottomOf="@+id/registration_number" />

            <EditText
                android:id="@+id/doctor_password"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:ems="10"
                android:hint="Password"
                android:inputType="textPassword"
                android:minHeight="48dp"
                app:layout_constraintEnd_toEndOf="@+id/doctor_email"
                app:layout_constraintStart_toStartOf="@+id/doctor_email"
                app:layout_constraintTop_toBottomOf="@+id/doctor_email" />

            <Button
                android:id="@+id/doctor_registerbutton_page1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="32dp"
                android:text="REGISTER"
                app:layout_constraintEnd_toEndOf="@+id/doctor_password"
                app:layout_constraintStart_toStartOf="@+id/doctor_password"
                app:layout_constraintTop_toBottomOf="@+id/doctor_password" />

            <TextView
                android:id="@+id/loginFromDoctor"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Login here"
                tools:layout_editor_absoluteX="280dp"
                tools:layout_editor_absoluteY="597dp"
                tools:ignore="MissingConstraints" />

        </androidx.constraintlayout.widget.ConstraintLayout>
    </ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.jeusain;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button choose_patient_account, choose_doctor_account;

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

        choose_patient_account = (Button) findViewById(R.id.patient_reg);
        choose_doctor_account = (Button) findViewById(R.id.doctor_reg);

        choose_patient_account.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openPatientRegister();
            }
        });

        choose_doctor_account.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openDoctorRegister();
            }
        });
    }
    public void openPatientRegister() {
        Intent goToPatientRegister = new Intent(getApplicationContext(), PatientRegistrationActivity.class);
        startActivity(goToPatientRegister);
    }
    public void openDoctorRegister() {
        Intent goToDoctorRegister = new Intent(getApplicationContext(), DoctorRegistrationActivity.class);
        startActivity(goToDoctorRegister);
    }
}

问题排查与解决方案

  1. Firebase自动登录跳转导致页面被隐藏
    在DoctorRegistrationActivity的onCreate方法中,存在以下代码:

    if (mAuth.getCurrentUser() != null){
        startActivity(new Intent(getApplicationContext(),DoctorProfileActivity.class));
        finish();
    }
    

    若当前Firebase已有登录用户,会直接跳转到医生主页,注册页面还未渲染就被关闭,这是最可能的原因。

    • 解决:测试时确保Firebase已登出,或临时注释这段代码验证;正式环境可在退出医生主页时执行登出操作。
  2. 布局控件约束缺失
    loginFromDoctor控件使用了编辑器绝对定位且忽略约束,虽不会导致整个布局不显示,但可能影响布局完整性,补充约束:

    <TextView
        android:id="@+id/loginFromDoctor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login here"
        android:layout_marginTop="16dp"
        app:layout_constraintEnd_toEndOf="@+id/doctor_registerbutton_page1"
        app:layout_constraintStart_toStartOf="@+id/doctor_registerbutton_page1"
        app:layout_constraintTop_toBottomOf="@+id/doctor_registerbutton_page1" />
    
  3. Activity注册验证
    确认AndroidManifest.xml中已注册DoctorRegistrationActivity:

    <activity android:name=".DoctorRegistrationActivity" />
    
  4. 注册按钮逻辑修正
    当前按钮点击后会直接跳转到登录页,跳过Firebase注册回调,需移除跳转代码,将跳转逻辑放在注册成功的回调中:

    doctorRegisterButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            performValidations();
            // 移除此处的跳转代码
        }
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:50:29