aliyun / aliyun-oss-android-sdk

Android SDK for aliyun object storage service
806 stars 307 forks source link

2.9.13 没网的时候没有onFailure的回调,是因为挂起吗,那为什么有网的时候进度和success都行。 #414

Open hcyAndroid opened 4 months ago

hcyAndroid commented 4 months ago

suspend fun syncUploadFile( objectName: String, dir: String, uploadFilePath: String? ): String = withContext(customDispatcher) { try { // 构造上传请求 val put = PutObjectRequest(bucket, dir + objectName, uploadFilePath) // 异步上传时可以设置进度回调 put.progressCallback = OSSProgressCallback { request, currentSize, totalSize -> Log.d( TAG, "PutObject>> currentSize: $currentSize totalSize: $totalSize" ) } // 使用协程异步等待上传结果 val result = CompletableDeferred() val task = oss.asyncPutObject( put, object : OSSCompletedCallback<PutObjectRequest?, PutObjectResult?> { override fun onSuccess( request: PutObjectRequest?, aliresult: PutObjectResult? ) { val url = oss.presignPublicObjectURL(bucket, dir + objectName); Log.d(TAG, "PutObject>> UploadSuccess>>>>${url}") result.complete(url) // 完成Deferred,返回url }

                override fun onFailure(
                    request: PutObjectRequest?,
                    clientExcepion: ClientException,
                    serviceException: ServiceException
                ) {
                    // 请求异常
                    if (clientExcepion != null) {
                        // 本地异常如网络异常等
                        Log.e(
                            TAG,
                            "PutObject>>本地异常如网络异常等==${clientExcepion.message.toString()}"
                        )
                    }
                    if (serviceException != null) {
                        // 服务异常
                        Log.e(TAG, "PutObject>>ErrorCode==${serviceException.errorCode}")
                        Log.e(TAG, "PutObject>>RequestId==${serviceException.requestId}")
                        Log.e(TAG, "PutObject>>HostId==${serviceException.hostId}")
                        Log.e(TAG, "PutObject>>RawMessage==${serviceException.rawMessage}")
                    }
                    val exception = clientExcepion ?: serviceException
                    result.completeExceptionally(
                        exception ?: RuntimeException("Unknown exception")
                    )

                }
            })
        result.await()
    } catch (e: Exception) {
        throw e
    }
}

没网的时候控制台有okhttp的回调 at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.kt:184) 2024-04-26 19:46:35.089 15477-16397 System.err com.example.rprint W at okhttp3.RealCall.execute(RealCall.kt:66) at com.alibaba.sdk.android.oss.network.OSSRequestTask.call

hcyAndroid commented 4 months ago

asyncSequenceUpload用这个就有回调。官方文档竟然放一个有问题的方法

wlll129 commented 2 months ago

onFailure的ClientException和ServiceException类型后需要加?