Не дает вызвать функцию kotlin, просит ввести аргумент хотя в списке параметров нет ни одного!
IDE Не дает вызвать функцию kotlin из java класса другого пакета, просит ввести аргумент, хотя в списке параметров нет ни одного!
Скажите, почему не дает вызвать функцию?
Ошибка:
error: method getFirebaseToken in class TokenProvider cannot be applied to given types;
String token = TokenProvider.getFirebaseToken().toString();
В классе котлина в другом пакете есть код по созданию этой функции:
suspend fun getTokenMy(): Any {
val token = Firebase.messaging.token.await()
return token.toString()
}
А в классе java другого пакета есть код, который вызывает функцию:
PushNotificationService PushNotificationService = new PushNotificationService();
FCM_token2 = PushNotificationServicelUtil.getTokenMy().toString();
и компилятор показывает ошибку:
method getTokenMy in class PushNotificationService cannot be applied to given types;
FCM_token2 = pushNotificationService.getTokenMy().toString();
^
И даже если создаю функцию другим способом, та же ошибка:
object TokenProvider {
@JvmStatic
suspend fun getFirebaseToken(): String {
return FirebaseMessaging.getInstance().token.await()
}
}
Вызываю в данном случае из Java класса вот так:
String token = TokenProvider.getFirebaseToken().toString();
System.out.println("Firebase Token: " + token);
Если же я вот так создаю функцию в котлине:
@file:JvmName("PushNotificationServicelUtil")
package fcmpushnotificationshttpv1
import com.google.firebase.firestore.FieldValue
import com.google.firebase.firestore.ktx.firestore
import com.google.firebase.ktx.Firebase
import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import com.google.firebase.messaging.ktx.messaging
import kotlinx.coroutines.tasks.await
val tokenMy: Any
get() {
TODO()
}
class PushNotificationService: FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
sendTokenToServer(token)
// Update server
}
override fun onMessageReceived(message: RemoteMessage) {
super.onMessageReceived(message)
// Respond to received messages
}
suspend fun getTokenMy(): String {
val token = Firebase.messaging.token.await()
return token.toString()
}
}
Возникает другая ошибка:
Failed to execute the transaction: tId:-1294874029 ClientTransaction { tId:-1294874029 transactionItems=[
tId:-1294874029
LaunchActivityItem {
activityToken=android.os.BinderProxy@cb96ca2,
intent=Intent {
act=android.intent.action.MAIN
cat=[android.intent.category.LAUNCHER]
flg=0x10000000 cmp=dem.corp.androidmessenger/.MainActivity
},
ident=54864729,
info=ActivityInfo{dbde59c dem.corp.androidmessenger.MainActivity},
curConfig={
1.0 310mcc260mnc [en_US] ldltr sw411dp w411dp h923dp 420dpi nrml long port finger qwerty/v/v dpad/v
winConfig={
mBounds=Rect(0, 0 - 1080, 2424)
mAppBounds=Rect(0, 0 - 1080, 2424)
mMaxBounds=Rect(0, 0 - 1080, 2424)
mDisplayRotation=ROTATION_0
mWindowingMode=fullscreen
mActivityType=undefined
mAlwaysOnTop=undefined
mRotation=ROTATION_0
}
as.3 s.54
fontWeightAdjustment=0
}
...
}
tId:-1294874029 Target activity: dem.corp.androidmessenger.MainActivity
Подскажите почему?
Обнолвение: Я сделал как сказал Влад, но не помогло:
object TokenProvider {
@OptIn(DelicateCoroutinesApi::class)
@JvmStatic
suspend fun getFirebaseToken(): Any? = GlobalScope.future {
return@future FirebaseMessaging.getInstance().token.await()
}
}
и так ошибка
object TokenProvider {
@OptIn(DelicateCoroutinesApi::class)
@JvmStatic
suspend fun getFirebaseToken(): CompletableFuture<String> = GlobalScope.future {
return@future FirebaseMessaging.getInstance().token.await()
}
}