EditText.setError(“错误文本”)不显示弹出窗口
Posted
技术标签:
【中文标题】EditText.setError(“错误文本”)不显示弹出窗口【英文标题】:EditText.setError("Error Text") not showing popups 【发布时间】:2022-01-21 16:19:18 【问题描述】:我正在创建一个简单的登录活动,并正在对一些 EditText 字段进行一些用户输入错误检查。
但是,setError 公共方法似乎没有显示任何内容,或者,如果是,我在运行应用程序时无法查看。
EditText 元素之一的 XML
<EditText
android:id="@+id/userName"
android:layout_
android:layout_
android:layout_below="@+id/imageView"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="25dp"
android:layout_marginTop="35dp"
android:layout_marginEnd="25dp"
android:background="#FFFFFF"
android:elevation="10dp"
android:ems="10"
android:hint="Username"
android:inputType="textPersonName"
android:minHeight="48dp"
android:textColor="@color/black"
android:textColorHint="#757575"
android:textSize="16sp" />
用于错误检查逻辑和帐户创建的 Java
public class NewUserActivity extends AppCompatActivity
EditText mUserName, mUserEmail , mUserPassword, mReEnterPass;
//CardView cdCreateAcct;
Button btnCreateAcct;
TextView btnGoToLogin;
FirebaseAuth firebaseAuth;
ProgressBar progressBar;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_user);
//java variables connecting to the xml objects/resources
mUserName = findViewById(R.id.userName);
mUserEmail = findViewById(R.id.userEmail);
mUserPassword =findViewById(R.id.userPassword);
mReEnterPass=findViewById(R.id.reEnterPass);
btnCreateAcct = findViewById(R.id.createAcctBtn);
btnGoToLogin = findViewById(R.id.alreadyMadeAcctText);
//instantiate the firebase variable
//getting the current instance of database from firebase
// to perform actions on the database
firebaseAuth = FirebaseAuth.getInstance();
//progress bar
progressBar = findViewById(R.id.progressBar);
//checking if user is already logged in or account already exists
if(firebaseAuth.getCurrentUser() != null)
startActivity(new Intent(getApplicationContext(), MainActivity.class));
finish();
btnCreateAcct.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
//Display a toast message
//Toast.makeText(NewUserActivity.this, "You clicked card view ", Toast.LENGTH_SHORT).show();
String name = mUserName.getText().toString().trim();
String email = mUserEmail.getText().toString().trim();
String password =mUserPassword.getText().toString().trim();
String reEnterP = mReEnterPass.getText().toString().trim();
//logic to check inputs , null , passwords the same ect.
if (TextUtils.isEmpty(name))
mUserName.requestFocus();
mUserName.setError("Enter in a Username.");
//mUserName.setError("Enter in a User Name.",);
return;
if (TextUtils.isEmpty(email))
mUserEmail.requestFocus();
mUserEmail.setError("Email is Required.");
return;
if (TextUtils.isEmpty(password))
mUserPassword.requestFocus();
mUserPassword.setError("Password is Required");
return;
if (password.length() <= 8)
mUserPassword.requestFocus();
mUserPassword.setError("Passwords must be Greater than 8 Characters.");
if (TextUtils.isEmpty(reEnterP))
mReEnterPass.requestFocus();
mReEnterPass.setError("Passwords must be the Same.");
return;
if((!password.equals(reEnterP)))
mReEnterPass.requestFocus();
mReEnterPass.setError("Passwords must be the Same.");
return;
//if everything is passed progress bar will show
progressBar.setVisibility(View.VISIBLE);
//create account in firebase
firebaseAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>()
@Override
public void onComplete(@NonNull Task<AuthResult> task)
if(task.isSuccessful())
Toast.makeText(NewUserActivity.this, "User Created", Toast.LENGTH_SHORT).show();
startActivity(new Intent(getApplicationContext(), LoginActivity.class));
else
Toast.makeText(NewUserActivity.this, "Error !" + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
);
);
即使单击我的创建帐户按钮并将用户名留空,我也看不到任何错误消息。 The edittext field is null and shows no error
我的错误检查逻辑是否关闭,或者我的 XML 有什么问题?
【问题讨论】:
它工作正常,它尝试了你的代码 创建断点并调试,无论您的代码是否可达 【参考方案1】:确保您的 Android.manifest 文件中只有一个 Activity 作为启动器
<activity
android:name=".LoginActivity"
android:exported="true"
android:theme="@style/Theme.Design.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
【讨论】:
请在您的答案中添加一些信息以使其更清楚。【参考方案2】:您可以尝试的另一个解决方案是使用 2 个属性使您的 EditText 具有焦点:
android:focusable="true"
android:focusableInTouchMode="true"
例子:
<TextView
android:layout_
android:layout_
android:focusable="true"
android:focusableInTouchMode="true"
android:text="@string/hello_world" />
来源:Android setError("error") not working in Textview
【讨论】:
仍然没有成功,有没有办法在我按下创建帐户按钮时查看android studio中的错误日志? 有一种使用 Logcat 进行日志记录的方法。我通常使用“Log.e”(错误)或“Log.i”(信息)进行日志记录。这是有关它的文档:developer.android.com/studio/debug/am-logcat#java 除此之外,我很确定它们是一种在 AppData 或您正在运行应用程序的模拟电话/电话中查找日志的方法。 Veiwing Logcat,当我点击 Crete Account 按钮时,我得到一个常量 ViewPostIme 指针 0,然后是 ViewPostIme 指针 1。以上是关于EditText.setError(“错误文本”)不显示弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章
EditText.setError()的弹出消息布局看起来很奇怪