Я работаю над заставкой, где он будет определять, зарегистрирован ли пользователь ранее или нет, на основе сохраненных значений SharedPreference.

Пожалуйста, позвольте мне задать этот вопрос еще раз, так как я просмотрел так много справок / руководств и примеров, это немного не помогло. Я застрял здесь на 2 дня ... Любая помощь действительно очень ценится.

Есть 2 вида деятельности. Приложение запускается с активностью SplashScreen, а затем, если файл sharepreference возвращает значение, отличное от NULL (означает, что пользователь был зарегистрирован ранее), оно начнет mainactivity. Иначе, если файл sharepreference возвращает значение null (означает, что пользователь впервые, он приводит пользователя к активности регистрации) ...

ПРОБЛЕМА: при каждом перезапуске приложения (даже при зарегистрированном пользователе) оно всегда переходит на страницу регистрации !! ПОЖАЛУЙСТА ПОМОГИ !!

Код для активности SPLASHSCREEN

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

    Thread timerThread = new Thread(){
        public void run(){
            try{
                sleep(3000);
            }catch(InterruptedException e){
                e.printStackTrace();
            }finally{

            }
        }
    };
    timerThread.start();

}

protected void onStart() {
    super.onStart();
    openNextActivity();
}

public void openNextActivity(){

    SharedPreferences sp = getSharedPreferences("pref", 0);
    if (sp.contains("Name")) {
        Intent intent = new Intent(SplashScreen.this, MainActivity.class);
        startActivity(intent);
    } else {
        Intent intent = new Intent(SplashScreen.this, Registration.class);
        startActivity(intent);
    }

}

@Override
protected void onPause() {
    super.onPause();
    finish();
}

Ниже приведен код для РЕГИСТРАЦИОННОЙ активности ...

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

    etName = (EditText) findViewById(R.id.etName);
    etEmail = (EditText) findViewById(R.id.etEmail);
    etMobilePhone = (EditText) findViewById(R.id.etMobilePhone);
    tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); // imei

    btnSubmit = (Button) findViewById(R.id.btnSubmit);
    btnSubmit.setOnClickListener(this);


}


public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btnSubmit:
            writePref();
            break;
    }
    finish();
}


private void writePref() {

    String userName  = etName.getText().toString();             //prepare variables values for write
    String userPhone  = etMobilePhone.getText().toString();     //prepare variables values for write
    String userEmail  = etEmail.getText().toString();           //prepare variables values for write
    String userImei = tel.getDeviceId().toString();             //prepare variables values for write

    SharedPreferences sp = getSharedPreferences("pref", 0);     //sharepreference
    SharedPreferences.Editor editor = sp.edit();                //sharepreference
    editor.putString(Name, userName);                           //write sharepreferences
    editor.putString(Phone, userPhone);                         //write sharepreferences
    editor.putString(Email, userEmail);                         //write sharepreferences
    editor.putString(Imei, userImei);                           //write sharepreferences
    editor.commit();                                            //sharepreference

    Toast toast = Toast.makeText(getApplicationContext(), "updated sharepreferences", Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL,0,50);
    toast.show();

}

Пожалуйста, направьте меня в правильном направлении. Спасибо, что прочитали и ответили.

1
Chim Ly 6 Янв 2016 в 11:34

2 ответа

Лучший ответ

Измените свой метод openNextActivity() на этот:

public void openNextActivity(){

    SharedPreferences sp = getSharedPreferences("pref", 0);
    String defaultValue = "na";
    String storedValue = sp.getString("Name", defaultValue);

    if (!storedValue.equalsIgnoreCase("na")) {
        Intent intent = new Intent(SplashScreen.this, MainActivity.class);
        startActivity(intent);
    } else { //if you get default value i.e. "na"
        Intent intent = new Intent(SplashScreen.this, Registration.class);
        startActivity(intent);
    }

}

Вместо того, чтобы проверять, существует ли ключ, проверьте его значение. Если ключ не найден, верните значение по умолчанию и сравните с возвращенным значением.

Обновление (из комментария Джелле ниже): также измените свой RegistrationActivity. Замените editor.putString(Name, userName); на editor.putString("Name", userName);

1
AndroidMechanic - Viral Patel 6 Янв 2016 в 09:16

Спасибо, ребята ... хотел поделиться решением ...

SharedPreferences sp = getSharedPreferences("pref", 0);     //sharepreference
    SharedPreferences.Editor editor = sp.edit();                //sharepreference
    editor.putString("Name", userName);                           //write sharepreferences
    editor.putString("Phone", userPhone);                         //write sharepreferences
    editor.putString("Email", userEmail);                         //write sharepreferences
    editor.putString("Imei", userImei);                           //write sharepreferences
    editor.commit();                                            //sharepreference

Судя по всему, решение - "" ... спасибо всем замечательным людям ...

1
Chim Ly 6 Янв 2016 в 09:15