簡體   English   中英

Getter 在不同的類中返回 null

[英]Getter returning null in different class

在制作 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 時,如下所示:

...
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 方法,我將以注釋的方式使用它)上面的代碼片段總是轉到 else 部分,因為 getToken 為空。 如果它在它自己的類中返回一個值,為什么它在這個類中返回 null? 可能是因為我做了 MainActivity mainActivity = new MainActivity();

一個答案將不勝感激。 提前致謝!

MainActivity mainActivity = new MainActivity();

此活動實例與 Android 系統在您看到設置的令牌時創建的活動實例不同。 此外,我們從不使用new創建活動。 Android 系統根據活動生命周期創建活動,您的代碼必須在此結構內工作。 要在活動之間傳遞數據,您需要在調用startActivity()時將其發送到Intent 有關如何執行此操作的示例,請參閱文檔

創建新活動會導致該活動的新實例,因此新令牌將為空

通過意圖將令牌作為來自 MainActivity 的字符串數據發送,然后從第二個 Activity 獲取該字符串數據(令牌),並隨心所欲地使用它。

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

在你的 SecondActivity 的 onCreate 方法中,你可以使用 getIntent().getStringExtra("token"); 檢索從第一個活動傳遞的令牌值

String token= getIntent().getStringExtra("token");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM