Java 关于在android中检查edittext中用户名可用性的建议

Java 关于在android中检查edittext中用户名可用性的建议,java,android,Java,Android,我有一个项目,其中有一个包含多个字段的注册表。其中一个字段是用户名。我想检查在edittext中输入的用户名值是否可用。因此我尝试使用onfocuslistener,即当ishasfocus变量为false时,请求会发送到服务器。我尝试了以下操作: txtusername.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void

我有一个项目,其中有一个包含多个字段的注册表。其中一个字段是用户名。我想检查在edittext中输入的用户名值是否可用。因此我尝试使用onfocuslistener,即当ishasfocus变量为false时,请求会发送到服务器。我尝试了以下操作:

txtusername.setOnFocusChangeListener(new View.OnFocusChangeListener()
        {
            @Override
            public void onFocusChange(View v, boolean hasFocus)
            {
                if (!hasFocus)
                {

                     username=txtusername.getText().toString().trim();
                if(username.equals("achuthan")){
                    txtusername.setError("Username exsists!");
                    isUsernameValid=false;
                }
                else
                {
                    isUsernameValid=true;
                }
            }
            }
        });
在按钮中单击submit按钮,我检查isUsernameValid是否为true

问题是:

检查用户名是否有效是在我将edittext保留到下一个字段时发生的。因此,在这种情况下,当我键入无效的用户名Achuthan,然后保留到下一个字段时,布尔值设置为false并显示错误。现在,如果我将用户名更正为有效用户名,但如果我不保留edittext的焦点并按submit,表单未被接受,因为布尔值未更改为true,这在else部分中发生。如何解决此问题

编辑:试过了,但没用

txtusername.setOnFocusChangeListener(new View.OnFocusChangeListener()
        {
            @Override
            public void onFocusChange(View v, boolean hasFocus)
            {
                isUsernameValid=true;
                if (!hasFocus||hasFocus)
                {
                    //check with server if username exsists,if exsists isUserNameValid=true else false
                     username=txtusername.getText().toString().trim();
                if(username.equals("achuthan")){
                    txtusername.setError("Username exsists!");
                    isUsernameValid=false;
                }
                else
                {
                    isUsernameValid=true;
                }
            }
            }
        });

虽然我不知道Android API,但以下方法可能有效:

txtusername.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        resetUsernameErrorState();
        if (!hasFocus) {
            validateUsername();
        }
    }
});

private void resetUsernameErrorState() {
    isUsernameValid = true;
    txtusername.setError(null);
}

private void validateUsername() {
    username = txtusername.getText().toString().trim();
    if(username.equals("achuthan")) {
        txtusername.setError("Username exsists!");
        isUsernameValid = false;
    }
}

因此,首先通过将验证变量设置为true并删除错误标志来重置错误状态。其次,如果文本字段失去焦点,请再次验证。

免责声明:我不知道Android API。也许您可以简单地将isUsernameValid=true设置为方法中的第一条语句——不管它是获得焦点还是失去焦点。然后只需检查焦点并尝试验证。请参见编辑,它不起作用。如果现在没有意义!现在你总是验证它。就这样吧!hasFocus。。。然后拆下另一部分。我会让它回答清楚我的建议。它没有帮助…当我键入achuthan并留下edittext时,错误消息会弹出。但是当我再次单击edittext时,错误消息就消失了,因为rest方法,当我单击submit按钮时,表单被接受。但是名称是achuthan,不应该被接受。