У меня есть следующий класс для проверки первого запуска моего приложения:
public class PrefManager
{
SharedPreferences pref;
SharedPreferences.Editor editor;
Context _context;
// shared pref mode
int PRIVATE_MODE = 0;
// Shared preferences file name
private static final String PREF_NAME = "dnq-welcome";
private static final String IS_FIRST_TIME_LAUNCH = "IsFirstTimeLaunch";
public PrefManager(Context context) {
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
public void setFirstTimeLaunch(boolean isFirstTime) {
editor.putBoolean(IS_FIRST_TIME_LAUNCH, isFirstTime);
editor.commit();
}
public boolean isFirstTimeLaunch() {
return pref.getBoolean(IS_FIRST_TIME_LAUNCH, true);
}
}
В моем вступлении я использую эту проверку, которая работает без проблем:
// Checking for first time launch - before calling setContentView()
prefManager = new PrefManager(this);
if (!prefManager.isFirstTimeLaunch()) {
launchHomeScreen();
finish();
}
Сейчас вмое второе занятие, я хочу продолжить проверку для входа в систему.Так что у меня есть почти тот же код, но он не работает.
import eu.healthydev.quizhero.Intro.PrefManager;
public class MainActivity extends AppCompatActivity {
PrefManager prefManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (mAuth.getCurrentUser() != null) {
// Checking for first time launch - before calling setContentView()
if (prefManager.isFirstTimeLaunch()) {
startActivity(new Intent(MainActivity.this, NewUserActivity.class));
Toast.makeText(MainActivity.this, "isFirstTimejoin.",
Toast.LENGTH_LONG).show();
}
else{
startActivity(new Intent(MainActivity.this, UserProfile.class));
Toast.makeText(MainActivity.this, "!isFirstTimejoin.",
Toast.LENGTH_LONG).show();
}
}
Я получаю нулевое исключение.Если я добавлю
prefManager = new PrefManager(this);
, то третье действие не изменит значения prefManager
@Override
public void onClick(View view) {
if(!TextUtils.isEmpty(editUsername.getText().toString().trim())) {
uploadUserData();
Intent intent = new Intent();
intent.setClass(NewUserActivity.this, GameChooseActivity.class);
startActivity(intent);
prefManager.setFirstTimeLaunch(false);
finishAffinity();
}
else{
FancyToast.makeText(NewUserActivity.this,"Nickname cannot be empty.",FancyToast.LENGTH_SHORT,FancyToast.ERROR,false).show();
}
, в противном случае третье действие будет работать без проблем.Итак, мой вопрос: зачем работать в 2 из трех занятий?Любая идея?(если нужно больше кода, просто спросите)
ОБНОВЛЕНИЕ
После многих попыток мне удается установить нужное значение, и теперь у меня возникает крайне невозможное событие ....:)
//check the current user
if (mAuth.getCurrentUser() != null) {
if (!prefManager.isFirstTimeLaunch()) {
Intent userprofile = new Intent(this, UserProfile.class);
startActivity(userprofile);
FancyToast.makeText(MainActivity.this,"!prefManager.isFirstTimeLaunch() User profile should run",FancyToast.LENGTH_SHORT,FancyToast.ERROR,false).show();
}
else {
startActivity(new Intent(MainActivity.this, NewUserActivity.class));
FancyToast.makeText(MainActivity.this, "New User should run", FancyToast.LENGTH_SHORT, FancyToast.ERROR, false).show();
}
}
Я вижу сообщение "! PrefManager.isFirstTimeLaunch () Профиль пользователя должен работать", но NewUserActivity запускается снова.!Полностью проиграл с этим делом!