Ниженаписанный код выполнется раньше вышенаписанного : и потому не могу получить fcm токен в переменную

У меня Ниженаписанный код выполнется раньше вышенаписанного . Не могу понять почему. Это видно по логам. Мне нужно в переменную FCM_token2 записать токен Firebase Messagining и использовать значение переменной в дальнейшем при регистрации пользователя. Но у меня получается получить токен только внутри метода onComplete, но не получается использовать токен вне метода, не получается использовать токен в переменной паблик (внутри одного класса),

Вот такой лог в логкате:

        D  FCM register token 55555 = FCM_token2 = null
         D  FCM register token 55555 token2  = com.google.android.gms.tasks.zzw@c0deb3e
       D  FCM register token 55555 внутри метода работает = dAHnU3XkYbOD6m2fc2Om4p:APA91bGZ50mhc5fmE9Jw71k4TOztLkl1RvJ2qNpjP892p9OIgks3F5NqXArPFbtYYNtCCCuoNSJSL_5xGBa5lNZvTYwKsGrEH1ftn4fw3nojYs9GS5mXBus

и вот содержимое REgisterActivity:

package dem.corp.androidmessenger;

import static androidx.fragment.app.FragmentManager.TAG;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.messaging.FirebaseMessaging;

import java.util.HashMap;
import java.util.Objects;

import dem.corp.androidmessenger.databinding.ActivityRegisterBinding;

public class RegisterActivity extends AppCompatActivity {

    private ActivityRegisterBinding binding;
    public String FCM_token2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityRegisterBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        SaveToken();

        binding.signUpBtn.setOnClickListener(v -> {
            if (binding.emailEt.getText().toString().isEmpty() || binding.passwordEt.getText().toString().isEmpty()
                || binding.usernameEt.getText().toString().isEmpty()){
                Toast.makeText(getApplicationContext(), "Fields cannot be empty", Toast.LENGTH_SHORT).show();
            }else{



                //Проверка есть ли такой пользователь уже с таким Именем
                final DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
                final HashMap<String, Object> hashMap = new HashMap<>();

                Query query = reference
                        .orderByChild("username")
                       // .equalTo("zzz333555");
                        .equalTo(binding.usernameEt.getText().toString());
                query.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if(dataSnapshot.getChildrenCount()>0) {
                            //username found
                            Toast.makeText(getApplicationContext(), "Введите другое имя. С таким именемем есть пользователь", Toast.LENGTH_LONG).show();
                            System.exit(0);
                        }else{
                            // username not found
                           // hashMap.put("username", strUsername);
                            //reference.child(firebaseUser.getUid()).updateChildren(hashMap);
                        }

                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });







                FirebaseAuth.getInstance().createUserWithEmailAndPassword(binding.emailEt.getText().toString(), binding.passwordEt.getText().toString())
                        .addOnCompleteListener(task -> {
                            if (task.isSuccessful()){
                                Toast.makeText(getApplicationContext(), "Fregiter ", Toast.LENGTH_SHORT).show();
                                HashMap<String, String> userInfo = new HashMap<>();
                                userInfo.put("email", binding.emailEt.getText().toString());
                                userInfo.put("username", binding.usernameEt.getText().toString());
                                userInfo.put("profileImage", "");
                                userInfo.put("chats", "ZqnkGaeyk3UkRLRJH8Qh1tQiF7d3");
                                //userInfo.put("FCM_token", token2 );

                                FirebaseDatabase.getInstance().getReference().child("Users").child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                        .setValue(userInfo);



                                //добавим тестовый чат

                                // String chatIdmyTest = generateChatId(uid, "1Sx2FCTKDcdfjhztPtTbWgSxFZP2");
                                String chatIdmyTest =  "ZqnkGaeyk3UkRLRJH8Qh1tQiF7d3";

                                String uid = Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid();
                                HashMap<String, String> chatInfo = new HashMap<>();
                                chatInfo.put("user1", uid);
                                chatInfo.put("user2", "1Sx2FCTKDcdfjhztPtTbWgSxFZP2");
                                FirebaseDatabase.getInstance().getReference().child("Chats").child(chatIdmyTest)
                                        .setValue(chatInfo);


                                Toast.makeText(getApplicationContext(), "Fregiter OK OK", Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(RegisterActivity.this, MainActivity.class));
                            }
                            else {
                                Toast.makeText(getApplicationContext(), "Введите LOGIN . С таким именемем есть пользователь", Toast.LENGTH_LONG).show();
                            }
                        });

            }
        });
    }




public void SaveToken() {

    //String token = String.valueOf(FirebaseMessaging.getInstance().getToken());
    // Log.i(TAG, "FCM Registration Token: " + token);
    //my test fcm
    FirebaseMessaging.getInstance().getToken()
            .addOnCompleteListener(new OnCompleteListener<String>() {
                @Override
                public void onComplete(@NonNull Task<String> task) {
                    if (!task.isSuccessful()) {
                        Log.w(TAG, "Fetching FCM registration token failed", task.getException());
                        return;
                    }

                    // Get new FCM registration token
                    String FCM_token = task.getResult();
                    Log.d(TAG, "FCM register token 55555 внцутри = " + FCM_token);
                    // Log and toast
                    //  String msg = getString(R.string.msg_token_fmt, token);

                    FCM_token2 = FCM_token;
                    // Toast.makeText(ProfileFragment.this, token, Toast.LENGTH_SHORT).show();
                    Log.d(TAG, "FCM register token 55555 = var FCM_token2" + FCM_token2);
                    //ут работает , выводит значение FCM_token2
                    //  return FCM_token2;
                }
            });

    //return;
    // fcmpushnotificationshttpv1.PushNotificationService pushNotificationService = new fcmpushnotificationshttpv1.PushNotificationService();


    // pushNotificationService.onNewToken();
    //  chatViewModel.sendMessage(false, "d-cIJH7gM598yE22mfCgJY:APA91bFD_rfYPnr6zoA9vlEtGftWl6R3y3DAqwB2I9pLX9BkpLy3HAhpTbPE42jVWSwhwAex0gqQmeiji0gbZWAAjokAL9BjJ-kl0Lhd6v_HbXjINWxPAng");


    String token2 = String.valueOf(FirebaseMessaging.getInstance().getToken());
    Log.d(TAG, "FCM register token 55555 = var FCM_token2 = " + FCM_token2);
    //выдает null почячему то!!! хотя выше код работал.


    Log.d(TAG, "FCM register token 55555 var token2 = " + token2);
//выдает null почячему то!!!


    //Toast.makeText(getApplicationContext(), FCM_token, Toast.LENGTH_SHORT).show();
    //end my test fcm
   // FCM_token2 = FCM_token;
    Log.d(TAG, "FCM register token 55555 = var FCM_token2222 ==== " + FCM_token2);
}



    
}

Я пробовал и внутри метода public void onComplete(@NonNull Task task) { приравнивать одну переменную к другой, но все равно не могу вне этого метода получить значение переменной.

Скажите , а почему переменная FCM_token2 у меня пустая? Верно ли понимаю,потому что сначала выполняется код :

   String token2 = String.valueOf(FirebaseMessaging.getInstance().getToken());
                Log.d(TAG, "FCM register token 55555 = var FCM_token2 = " + FCM_token2);
                //выдает null почячему то!!! хотя выше код работал.
                Log.d(TAG, "FCM register token 55555 var token2 = " + token2);

а только потом код в методе OnComplete? почему так?


Ответы (0 шт):