java - 如何修复 java.util.concurrent.ExecutionException :

标签 java android multithreading kotlin task

我在 Google Play Android Vitals 上看到了一些来自以下代码的崩溃报告:

val currentUser = auth.currentUser

            if (currentUser != null) {
                sessionToken = Tasks.await(currentUser.getIdToken(true)).token
                newRequest = request
                        .newBuilder()
                        .header(AUTHORIZATION, "$BEARER $sessionToken")
                        .build()
            } else {
                newRequest = request
                        .newBuilder()
                        .build()
            }

出现问题的行是这样的:sessionToken = Tasks.await(currentUser.getIdToken(true)).token

auth 是 FirebaseUser 对象。该代码位于拦截器中,它为需要它的请求添加授权 token 。

我不知道如何解决这个问题。我正在考虑用

包装所有代码
syncronized(this) {
       //here goes the code
}

但我不确定这是否能解决我的问题。

完整的堆栈跟踪:

    java.lang.Error: 
      at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1173)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
      at java.lang.Thread.run (Thread.java:764)
    Caused by: java.util.concurrent.ExecutionException: 
      at com.google.android.gms.tasks.Tasks.zzb (Unknown Source:61)
      at com.google.android.gms.tasks.Tasks.await (Unknown Source:23)
      at com.cofedistrict.data.remote.interceptors.TokenHeaderInterceptor.intercept (TokenHeaderInterceptor.kt:37)
      at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
      at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
      at okhttp3.logging.HttpLoggingInterceptor.intercept (HttpLoggingInterceptor.java:213)
      at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:147)
      at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:121)
      at okhttp3.RealCall.getResponseWithInterceptorChain (RealCall.java:200)
      at okhttp3.RealCall$AsyncCall.execute (RealCall.java:147)
      at okhttp3.internal.NamedRunnable.run (NamedRunnable.java:32)
      at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
 Caused by: java.util.concurrent.ExecutionException: com.google.firebase.auth.FirebaseAuthInvalidUserException: The user's credential is no longer valid. The user must sign in again.
      at com.google.firebase.auth.api.internal.zzdx.zza
      at com.google.firebase.auth.api.internal.zzfa.zza
      at com.google.firebase.auth.api.internal.zzet.zza
      at com.google.firebase.auth.api.internal.zzev.zza
      at com.google.firebase.auth.api.internal.zzed.zza
      at com.google.android.gms.internal.firebase_auth.zza.onTransact
      at android.os.Binder.execTransact (Binder.java:739)

最佳答案

改变

val currentUser = auth.currentUser

val currentUser = FirebaseAuth.getInstance().currentUser

然后检查

if (currentUser != null) {
     //your code here
}

如果我的解决方案不能解决您的问题,请检查一下 它说

Caused by: java.util.concurrent.ExecutionException: com.google.firebase.auth.FirebaseAuthInvalidUserException: The user's credential is no longer valid

因此请使用有效的登录凭据。

关于java - 如何修复 java.util.concurrent.ExecutionException :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59379016/

相关文章:

java - 如何通过对类的引用来调用instanceof。

android - ListAdapter submitList 未更新

java - 当这个新的Thread()在Android中被GC时?

java - 从 httpmultipart 请求获取 xml 响应

vb.net - .NET 创建新调度程序

java - 尝试将 JSON 字符串转换为 JavaPOJO 时遇到奇怪的问题

java - eclipse spring 中正确的文件路径是什么

java - 当我以静态方式同步块(synchronized block)调用 wait() 时,为什么 Java 抛出 java.lang.IllegalMonitorStateException?

java - 测java短时间运行线程执行时间

java - 基于Swing的应用架构