我想在每次启动应用时检查editext
中的值。我正在使用共享首选项来存储第一次启动应用时输入的edittext
值用户。如果edittext
中的值与保存的共享首选项值相同,则下次启动应用时,应用会跳过它并显示下一个活动,而不是显示该活动。 Prob即使edittext
中的值正确,app也没有跳过该活动。我认为比较值可能不正确。
MainActivity
public class LoginActivity extends Activity{
EditText et;
int keyDel;
String tempString;
char[] stringArray;
SharedPreferences sharedpreferences;
public static final String mypreference = "mypref";
public static final String PIN = "passKey";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.loginactivity);
et = (EditText)findViewById(R.id.editText1);
///////////////////////////////////// Shared Preference Code Starts /////////////////////////////////////////////////////////////////////////
sharedpreferences = getSharedPreferences(mypreference, Context.MODE_PRIVATE);
if (sharedpreferences.contains(PIN)) {
et.setText(sharedpreferences.getString(PIN, ""));
}
String chk_et = et.getText().toString();
if(chk_et == sharedpreferences.getString(PIN, "")){
startActivity( new Intent(LoginActivity.this, Welcome.class));
finish();
//finish();
}else{
Toast.makeText(getApplicationContext(), "Wrong Details", Toast.LENGTH_SHORT).show();
}
///////////////////////////////////// Shared Preference Code Ends ///////////////////////////////////////////////////////////////////////////
///////////////////////////////////// Text Watcher Code Starts //////////////////////////////////////////////////////////////////////////////
et.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
et.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode != KeyEvent.KEYCODE_DEL && et.getText().length() !=0)
{
if(et.getText().length()==4 ||et.getText().length()==8)
{
tempString=et.getText().toString()+"-";
char c=tempString.charAt(tempString.length()-2);
if(c!='-')
{
stringArray = tempString.toCharArray();
stringArray[tempString.length()-2]=stringArray[tempString.length()-1];
stringArray[tempString.length()-1]=c;
//code to convert charArray back to String..
tempString=new String(stringArray);
et.setText(tempString);
et.setSelection(tempString.length());
tempString=null;
}
}
}
return false ;
}
});
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
///////////////////////////////////// Text Watcher Code Ends //////////////////////////////////////////////////////////////////////////////
} // onCreate ends
public void Save(View view) {
String et_new = et.getText().toString();
Editor editor = sharedpreferences.edit();
editor.putString(PIN, et_new);
editor.commit();
}
} // Activity ends
答案 0 :(得分:1)
您不应该将String对象与 function show(obj){ console.log(obj)}
运算符进行比较。
使用==
时,您基本上检查两个引用是否都指向堆中的同一个String对象。
您应该做的是将String与==
方法进行比较,该方法会比较字符串的内容。
答案 1 :(得分:0)
这种逻辑毫无意义:
if (sharedpreferences.contains(PIN)) {
et.setText(sharedpreferences.getString(PIN, ""));
}
String chk_et = et.getText().toString();
if(chk_et == sharedpreferences.getString(PIN, "")){
startActivity( new Intent(LoginActivity.this, Welcome.class));
finish();
//finish();
}else{
Toast.makeText(getApplicationContext(), "Wrong Details", Toast.LENGTH_SHORT).show();
}
阅读文档!
P.S。最好将String值与equals()方法进行比较。