Не может принимать булево значение между действиями - PullRequest
0 голосов
/ 31 января 2019

У меня есть следующий класс для проверки первого запуска моего приложения:

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 запускается снова.!Полностью проиграл с этим делом!

1 Ответ

0 голосов
/ 31 января 2019

Во втором упражнении вам нужно создать экземпляр PrefManager.

Вместо

PrefManager prefManager;//null. 

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            if (mAuth.getCurrentUser() != null) {
            //WARNING. prefManager is null. NullPointer exception is comming.
            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 в методе onCreate.

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        prefManager = new PrefManager(this);//instance. 
            if (mAuth.getCurrentUser() != null) {
            //ALL OK. prefManager is not null. NullPointerException is avoided.
            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();
            }
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...