Геттер возвращает ноль в другом классе - PullRequest
0 голосов
/ 18 марта 2020

при создании приложения Android я столкнулся со следующей проблемой:

Мой MainActivity выглядит следующим образом:

...
private String token;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
tokenSetter();
}
private void tokenSetter() {
    FirebaseInstanceId.getInstance().getInstanceId()
            .addOnCompleteListener(task -> {
                if (!task.isSuccessful()) {
                    Log.w("TRAZENITOKEN", "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = Objects.requireNonNull(task.getResult()).getToken();
                setToken(token);

                Log.d("TRAZENITOKEN", "onGetToken: " + token);

                // Log and toast
                // Log.d("TRAZENITOKEN", "onComplete: " + token);
            });
}
public String getToken() {
    return token;
}

public void setToken(String token) {
    this.token = token;
}

Я знаю, что значение токена устанавливается как в другом методе внутри этого класса MainActivity, когда я вызываю getToken (), я получаю значение.

Однако, когда я пытаюсь вызвать getToken из другого Activity, что-то вроде этого:

...
button.setOnClickListener(view -> {
        FirebaseActions firebaseActions = new FirebaseActions();
        MainActivity  mainActivity = new MainActivity();
        //firebaseActions.setUserNameOnToken(editText.getText().toString());
        if(mainActivity.getToken() != null) editText.setText(mainActivity.getToken());
        else editText.setText("Skafiskafnjak");
    });

(я выбрал метод editText.setText для целей отладки, я собираюсь использовать его с комментариями) Приведенный выше фрагмент кода всегда переходит к остальной части, так как getToken имеет значение null. Почему он возвращает нуль в этом классе, если он возвращает значение в своем собственном классе? Может быть, потому, что я сделал MainActivity mainActivity = new MainActivity ();

Ответ был бы признателен. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Создание нового действия вызывает новый экземпляр этого действия, поэтому новый токен будет иметь значение null

Отправьте токен через намерение в виде данных String из вашей MainActivity, а затем из второго действия, захватите эту строку данные (токен) и делайте с ним все, что хотите.

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("token", yourTokenValue);
startActivity(intent);

и в методе onCreate вашего SecondActivity вы можете использовать getIntent (). getStringExtra ("token"); чтобы получить значение токена, который был передан из первого действия

String token= getIntent().getStringExtra("token");
1 голос
/ 18 марта 2020

MainActivity mainActivity = new MainActivity ();

Этот экземпляр действия отличается от экземпляра системы Android, в котором вы видите установленный токен. Кроме того, мы никогда не создаем действие с new. . Система Android создает действия в соответствии с жизненным циклом действия , и ваш код должен работать в этой структуре. Для передачи данных между действиями необходимо отправить их в Intent при вызове startActivity(). См. документацию для примера того, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...