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()的弹出消息布局看起来很奇怪

EditText setError 没有留在盒子上

swift 具有错误文本支持的UITextField。在UITextField下面绘制错误文本。

Flutter Cupertino 文本字段大小错误

Material Textfield 在设置错误文本时崩溃

如何从 BindingResult 获取控制器中的错误文本