检查共享首选项值

时间:2015-08-11 11:10:40

标签: android sharedpreferences

我想在每次启动应用时检查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  

2 个答案:

答案 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()方法进行比较。