2017-08-03 69 views
0

我想创建一个基本的创建帐户系统(它是我第一天使用Android工作室,所以不要太苛刻的判断)每次我测试程序它只是默认直接其他甚至当两个密码完全不同时。非常感谢你提前给予的帮助。Android Studio .compareTo和.equals字符串不工作

public class CreateAccount extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_create_account); 

    Button Submit_btn = (Button) findViewById(R.id.Submit_btn); 

    final EditText Username_txt = (EditText)findViewById(R.id.Username_txt); 
    final EditText Email_txt = (EditText)findViewById(R.id.Email_txt); 
    final EditText Password_txt = (EditText)findViewById(R.id.Password_txt); 
    final EditText VerifyPassword_txt = (EditText)findViewById(R.id.VerifyPassword_txt); 

    final TextView Error_txt = (TextView)findViewById(R.id.Error_txt); 

    final String Username_string = Username_txt.getText().toString(); 
    final String Email_string = Email_txt.getText().toString(); 
    final String Password_string = Password_txt.getText().toString(); 
    final String VerifyPassword_string = VerifyPassword_txt.getText().toString(); 


    Submit_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if (!Password_string.equals(VerifyPassword_string)) { 
       Error_txt.setText("Passwords must be matching"); 

      } else { 
       Error_txt.setText("No Error"); 
      } 
     } 
} 
+0

尝试让你按一下按钮听众 – akhilesh0707

+0

从里面的的EditText值是大小写敏感的意识到这一点? –

+0

他们有默认值吗?您在获取VerifyPassword_txt一次,创建活动时,我认为它在那一刻是空的,因此您需要将onClick中的值视为@AkhileshPatil – Ivan

回答

0

正在尝试在此时他们不会有任何值的onCreate它自己的时间,让您的EditText的值因为只有在屏幕打开后才可以输入它们。所以你应该只在你的onclick上做这个计算 -

Submit_btn.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View view) { 

final String Password_string = Password_txt.getText().toString(); 
final String VerifyPassword_string = VerifyPassword_txt.getText().toString(); 
    if (!Password_string.equals(VerifyPassword_string)) { 
     Error_txt.setText("Passwords must be matching"); 

    } else { 
     Error_txt.setText("No Error"); 
    } 
} 

因此,了解活动生命周期在这里。调用onCreate将您的视图设置为您的活动的第一个方法。那时你的视图中没有任何用户填充的数据。一旦视图被填充并且您看到了用户界面,用户就会与之交互。因此,在用户输入之后需要执行的任何计算都必须基于操作(在本例中为btn点击),因此在操作时总是尝试获取数据。

0

试试这个

Submit_btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

    final String Password_string = Password_txt.getText().toString(); 
    final String VerifyPassword_string = VerifyPassword_txt.getText().toString(); 
     if (!Password_string.equals(VerifyPassword_string)) { 
      Error_txt.setText("Passwords must be matching"); 

     } else { 
      Error_txt.setText("No Error"); 
     } 
    } 
+0

不幸的是问题仍然存在。得到它了! – Bomba

1

改变你的onClick方法来检索值

public void onClick(View view) { 
    Password_string = Password_txt.getText().toString(); 
    VerifyPassword_string = VerifyPassword_txt.getText().toString(); 

    if (!Password_string.equals(VerifyPassword_string)) { 
      Error_txt.setText("Passwords must be matching"); 
    } else { 
      Error_txt.setText("No Error"); 
    } 
} 

也可以尝试使用Java标准命名约定

例如

String passwordString = ""; 
+1

明白了!感谢:D – Bomba

0

我已经做了一些改变,现在试试

final String Username_string = Username_txt.getText().toString(); 
final String Email_string = Email_txt.getText().toString(); 
//final String Password_string = Password_txt.getText().toString(); 
//final String VerifyPassword_string = VerifyPassword_txt.getText().toString(); 


Submit_btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     String passwordStr= Password_txt.getText().toString(); 
     String passwordConfirmStr=VerifyPassword_txt.getText().toString(); 
     if (!passwordStr.equals(passwordConfirmStr)) { 
      Error_txt.setText("Passwords must be matching"); 
     } else { 
      Error_txt.setText("No Error"); 
     } 
     } 
    }); 
1

你活动的初始化过程中进行硬编码从输入控件检索值:

@Override 
protected void onCreate(Bundle savedInstanceState) { 

... 
    final String Username_string = Username_txt.getText().toString(); 
    final String Email_string = Email_txt.getText().toString(); 
    final String Password_string = Password_txt.getText().toString(); 
    final String VerifyPassword_string = 
          VerifyPassword_txt.getText().toString(); 
    ... 
} 

您有密码输入的问题,但你必须对电子邮件和用户输入同样的问题。
你应该动态地获取它们。

例如,对于密码输入:

public void onClick(View view) { 

     if (!Password_txt.getText().toString().equals 
       (VerifyPassword_txt.getText().toString())) { 
      Error_txt.setText("Passwords must be matching");  
     } else { 
      Error_txt.setText("No Error"); 
     } 

} 
2

您应该添加trim()

返回一个字符串,其值是该字符串,并移除任何前导和 尾随空白。

Submit_btn.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View view) 
    { 

    final String Password_string = Password_txt.getText().toString().trim(); 
    final String VerifyPassword_string = VerifyPassword_txt.getText().toString().trim(); 

     if (!Password_string.equals(VerifyPassword_string)) 
     { 
      Error_txt.setText("Passwords must be matching"); 

     } else 
     { 
      Error_txt.setText("No Error"); 
     } 
    } 
}); 
+1

关于修剪的好点 –

+0

@ScaryWombat谢谢先生 –