下面是一段firebase上的用于获取当前token的代码,我需要把这个token获取然后返回给外面使用,并封装成一个方法
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 token = task.getResult();
// Log and toast
String msg = getString(R.string.msg_token_fmt, token);
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
封装之后
/**
* 获取当前FirebaseToken
* @return
*/
public String getFirebaseToken(){
String token = "";
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Log.w("firebase_token", "Fetching FCM registration token failed", task.getException());
return ;
}
// Get new FCM registration token
token = task.getResult();
// Log and toast
Log.d("firebase_token", token.toString());
Toast.makeText(MCApiFactoryControl.getInstance().getContext(), token, Toast.LENGTH_SHORT).show();
}
});
return token;
}
错误信息
Variable 'token' is accessed from within inner class, needs to be final or effectively final
这个信息里面已经提示的很详细了,不能在内部类中赋值外部的变量,所以需要加一个final修饰token
之后就会出现新的报错
2. Cannot assign a value to final variable 'token'
不能在final修饰的变量赋值之后重新赋值。
这个我记得String是个对象,所以以为final只是固定了对象的地址不变,忘记了String不可以重新赋值。
所以将String替换为StringBuffer,并使用append方法进行赋值。
/**
* 获取当前FirebaseToken
* @return
*/
public String getFirebaseToken(){
final StringBuffer token = new StringBuffer("");
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Log.w("firebase_token", "Fetching FCM registration token failed", task.getException());
return ;
}
// Get new FCM registration token
token.append(task.getResult());
// Log and toast
Log.d("firebase_token", token.toString());
Toast.makeText(MCApiFactoryControl.getInstance().getContext(), token, Toast.LENGTH_SHORT).show();
}
});
return token.toString();
}