为什么在 android 中单击按钮时编辑文本返回空字符串?

Why Edit Text returning empty string on a button click in android?

制作一个简单的登录屏幕,我在其中使用用户名和密码的两个编辑文本。我在单击按钮时设置了一个侦听器,并使用 getText() 函数将值存储在变量中,但我得到的是空字符串。我试图为变量干杯,但在调试时我得到的是空的干杯。

 EditText ed1,ed2;
    Button b1;
    DatabaseReference dr;
    Query q;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ed1=findViewById(R.id.editText10);
        ed2=findViewById(R.id.editText11);
        b1=findViewById(R.id.button);
        final String role=getIntent().getStringExtra("role");
        b1.setOnClickListener(new View.OnClickListener() {
            String username=ed1.getText().toString();
            String input_password=ed2.getText().toString();
            @Override
            public void onClick(View view) {

                if(role.equals("teacher"))
                {
                    dr= FirebaseDatabase.getInstance().getReference();
                    Toast.makeText(LoginActivity.this, username+" "+input_password, Toast.LENGTH_SHORT).show();
                    Query q=dr.child("Teachers").orderByChild("username").equalTo(username);
                    q.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            if(!dataSnapshot.exists())
                            {
                                Toast.makeText(LoginActivity.this, "Invalid Combination no data", Toast.LENGTH_SHORT).show();
                            }
                            for (DataSnapshot ds: dataSnapshot.getChildren())
                            {
                                Map mp=(Map) ds.getValue();
                                String password=mp.get("password").toString();
                                if(input_password.equals(password))
                                {
                                    MyData.teacher=username;
                                    startActivity(new Intent(LoginActivity.this,SelectClass.class));
                                }
                                else
                                {
                                    Toast.makeText(LoginActivity.this, "Invalid Combination", Toast.LENGTH_SHORT).show();
                                }

                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

                }
                else
                {
                    startActivity(new Intent(LoginActivity.this,AdminActivity.class));
                }

            }
        });
    }

这是我的 Xml 文件


    <LinearLayout
        android:layout_width="203dp"
        android:layout_height="227dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.427"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.324">

        <EditText
            android:id="@+id/editText10"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Username"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/editText11"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Password"
            android:inputType="textPassword" />

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Login" />
    </LinearLayout>

你把代码放错地方了。你需要把它移到 onClick

里面
b1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    String username=ed1.getText().toString();
    String input_password=ed2.getText().toString();
    //rest of your code as it is

请将这些 两行添加到您的 public void onClick(View view) 方法

username=ed1.getText().toString();
input_password=ed2.getText().toString();

然后您可以检查 null 或 Empty

if (username!= null && !username.isEmpty() && !username.equals("null"))