我试图在我的应用程序开始时尝试最基本的安全形式,如果你输入正确的名字和姓氏,将会调用一个新的活动。
请在此处查看我的代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonIntroSubmit = (Button) findViewById(R.id.button_intro);
Intent introPass = new Intent(this, questionareActivity.class);
buttonIntroSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText firstName = (EditText) findViewById(R.id.first_name);
EditText lastName = (EditText) findViewById(R.id.last_name);
TextView test = (TextView) findViewById(R.id.test);
String fullName = firstName.getText() + " " + lastName.getText();
String password = "Mieke Snyman";
test.setText(fullName);
if(fullName !== password) {
String toastPass = "Approved";
Toast pass = Toast.makeText(getApplicationContext(), toastPass, Toast.LENGTH_LONG);
pass.show();
}
}
});
}
如果我输入" Mieke"在firstName字段和#34; Snyman"在lastName,它显示" Mieke Snyman"在测试TextView,我通过变量" fullName"分配了文本内容。但是如果我对if条件使用相同的变量,它就不会进入if。
任何想法为什么?也许是一个白色空间角色或我在if条件下缺少的东西?
答案 0 :(得分:1)
http://www.tutorialspoint.com/java/java_basic_operators.htm
if(fullName !== password) { // !== we don't have any opertor like this in java.
String toastPass = "Approved";
Toast pass = Toast.makeText(getApplicationContext(), toastPass, Toast.LENGTH_LONG);
pass.show();
}
相反,你可以这样做
if (!fullName.equals(password){
}
http://perso.ensta-paristech.fr/~diam/java/online/notes-java/data/expressions/22compareobjects.html
答案 1 :(得分:1)
使用.equals();
代替==
所以它看起来像这样:
if (!fullName.equals(password){
String toastPass = "Approved";
Toast pass = Toast.makeText(getApplicationContext(), toastPass, Toast.LENGTH_LONG);
pass.show();
}
重要信息
==
测试引用相等性。
.equals()
测试价值平等。
正如你所看到的
String fullName
与String password
的引用不同false
,请注意==
与基元完美匹配;仅仅因为它们不是java中字符串的对象。
修改强>
谈到安全性我可以注意到你使用String来保存密码,这在java中是一种不好的做法。
一旦你创建了一个字符串,你就无法摆脱内存中的数据,因为字符串是不可变的,所以最好使用char []