Android工作室问题;将变量 'refreshedToken' 类型更改为 'Task<String>

Android Studio issue; change variable 'refreshedToken' type to 'Task<String>

由于 Android Studio 中已弃用 FirebaseInstanceId,我该如何更正此代码块?

String refreshedToken = FirebaseInstanceId.getInstance().getToken();

我试着改成这样:

String refreshedToken = FirebaseMessaging.getInstance().getToken();

但是当我这样做时,我收到一条错误消息

Change variable 'refreshedToken' type to 'Task<String>'

我的完整代码是:

import android.app.Application;

import androidx.multidex.MultiDexApplication;

import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.messaging.FirebaseMessaging;

public class MyApplication extends MultiDexApplication {

    @Override
    public void onCreate() {
        super.onCreate();

        FirebaseDatabase.getInstance().setPersistenceEnabled(true);

        FirebaseMessaging.getInstance().subscribeToTopic("fireblogappnotification");
         String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    }
}

它给你这个错误是因为 FirebaseMessaging.getInstance().getToken(); 有 return 类型的 Task<String> 并且你正在使用字符串。

所以您可以做的是添加侦听器并等待任务完成并从中获取令牌。

如下:

Task<String> refreshedToken = FirebaseMessaging.getInstance().getToken();
        refreshedToken.addOnCompleteListener(new OnCompleteListener<String>() {
            @Override
            public void onComplete(@NonNull @NotNull Task<String> task) {
                if (task.isSuccessful()){
                    String token = task.getResult();
                }
            }
        });

您收到以下错误:

Change variable 'refreshedToken' type to 'Task'

因为你想把一个Task<String>类型的对象保存到String类型的对象中,这在Java中其实是不可能的,这是因为这些之间没有继承关系两个 类.

为了获取令牌,您需要附加一个侦听器。所以请尝试以下代码行:

Task<String> tokenTask = FirebaseMessaging.getInstance().getToken();
tokenTask.addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            String token = task.getResult();
            Log.d("TAG", "token: " + token);
            //Do what you need to do with your token
        }
    }
});