为什么在 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"))
制作一个简单的登录屏幕,我在其中使用用户名和密码的两个编辑文本。我在单击按钮时设置了一个侦听器,并使用 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"))