2024-11-25 12:12:37.420 29179-29263 AndroidRuntime com.xcelcorp.cricdost E FATAL EXCEPTION: WM.task-3
Process: com.xcelcorp.cricdost, PID: 29179
android.net.ConnectivityManager$TooManyRequestsException
at android.net.ConnectivityManager.convertServiceException(ConnectivityManager.java:3542)
at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3730)
at android.net.ConnectivityManager.registerDefaultNetworkCallback(ConnectivityManager.java:4222)
at android.net.ConnectivityManager.registerDefaultNetworkCallback(ConnectivityManager.java:4189)
at androidx.work.impl.utils.NetworkApi24.registerDefaultNetworkCallbackCompat(NetworkApi24.kt:26)
at androidx.work.impl.constraints.trackers.NetworkStateTracker24.startTracking(NetworkStateTracker.kt:165)
at androidx.work.impl.constraints.trackers.ConstraintTracker.addListener(ConstraintTracker.kt:52)
at androidx.work.impl.constraints.controllers.BaseConstraintController$track$1.invokeSuspend(ContraintControllers.kt:62)
at androidx.work.impl.constraints.controllers.BaseConstraintController$track$1.invoke(Unknown Source:8)
at androidx.work.impl.constraints.controllers.BaseConstraintController$track$1.invoke(Unknown Source:4)
at kotlinx.coroutines.flow.ChannelFlowBuilder.collectTo$suspendImpl(Builders.kt:316)
at kotlinx.coroutines.flow.ChannelFlowBuilder.collectTo(Unknown Source:0)
at kotlinx.coroutines.flow.CallbackFlowBuilder.collectTo(Builders.kt:330)
at kotlinx.coroutines.flow.internal.ChannelFlow$collectToFun$1.invokeSuspend(ChannelFlow.kt:56)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@ebe8c59, androidx.work.impl.utils.SerialExecutorImpl@bbb101e]
2024-11-25 12:12:37.444 29179-29179 chatty com.xcelcorp.cricdost I uid=10295(com.xcelcorp.cricdost) identical 4 lines Please give solution
Я пытался обработать исключение с помощью Result.retry(). Когда код состояния HTTP == 429, дополнительно я добавил экспоненциальную отсрочку через 30 секунд.
class ScoreSyncAPIWorker(var context: Context, params: WorkerParameters) : Worker(
context, params) {
var mTag = "ScoreWorker"
private val repository by lazy { AppRepository() }
override fun doWork() : Result { // Do the work here--in this case, upload the images. //getting the input data val matchId = inputData.getString(TASK_MATCH_ID) // Indicate whether the work finished successfully with the Result val dbUtil = DbUtil(context) val unsyncedData = dbUtil.getUnsyncedData(matchId!!) return if (unsyncedData.size > 0) { val reqData = unsyncedData[0] // dbUtil.updateSyncProgress(reqData.getId(), "" + matchId, 1); val scoreId = reqData.id val mod = reqData.mod val actionType = reqData.actionType val subAction = reqData.subAction val lastBallId = reqData.getLastBallId() // val response = DataRepository.instance?.scoreSynApi(mod, actionType, subAction) val response = repository.scoreSynApi(mod, actionType, subAction) if (response != null) { val jsonResponse = response.body() var apiStatus = -1 if (jsonResponse != null && jsonResponse.has("XSCStatus")) { apiStatus = jsonResponse["XSCStatus"].asInt } if (apiStatus == 0) { /*if (jsonResponse != null && jsonResponse.has("XSCData")) { JsonObject xscData = jsonResponse.get("XSCData").getAsJsonObject(); }*/ dbUtil.updateSyncStatus(scoreId, "" + matchId, "" + jsonResponse, lastBallId)
//score update for other users SocketIOHandler.scoreUpdated(matchId) //score update for myself ScoringHelper.onScoreUpdateSuccess(context, "" + matchId)
val isAllDataSync = dbUtil.getUnsyncedData(matchId).size == 0 AppBroadcasters.broadcastScoreSynced(applicationContext, matchId.toInt(), lastBallId, isAllDataSync)
createWorkManager(context, matchId) } else {
var msg = "" if (jsonResponse != null) { msg = jsonResponse["XSCMessage"].asString } dbUtil.updateSyncProgress(scoreId, "" + matchId, 0) if (msg.equals("You are not a scorer.", ignoreCase = true)) { dbUtil.deleteMatchData(matchId.toString()) } } Result.success() } else { dbUtil.updateSyncProgress(scoreId, "" + matchId, 0) Result.success() //Result.failure(); //retry(); } } else { Result.success() } }
private fun createWorkManager(context: Context, matchId: String?) { val data = Data.Builder() .putString(TASK_MATCH_ID, matchId) .build() val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() val syncRequest = OneTimeWorkRequest.Builder(ScoreSyncAPIWorker::class.java) .setInputData(data) .setConstraints(constraints) .addTag("MATCH_$matchId") .build() WorkManager.getInstance(context).enqueue(syncRequest) }
companion object { const val TASK_MATCH_ID = "task_match_id" } } [/code] у меня есть исключение: [code]2024-11-25 12:12:37.420 29179-29263 AndroidRuntime com.xcelcorp.cricdost E FATAL EXCEPTION: WM.task-3 Process: com.xcelcorp.cricdost, PID: 29179 android.net.ConnectivityManager$TooManyRequestsException at android.net.ConnectivityManager.convertServiceException(ConnectivityManager.java:3542) at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:3730) at android.net.ConnectivityManager.registerDefaultNetworkCallback(ConnectivityManager.java:4222) at android.net.ConnectivityManager.registerDefaultNetworkCallback(ConnectivityManager.java:4189) at androidx.work.impl.utils.NetworkApi24.registerDefaultNetworkCallbackCompat(NetworkApi24.kt:26) at androidx.work.impl.constraints.trackers.NetworkStateTracker24.startTracking(NetworkStateTracker.kt:165) at androidx.work.impl.constraints.trackers.ConstraintTracker.addListener(ConstraintTracker.kt:52) at androidx.work.impl.constraints.controllers.BaseConstraintController$track$1.invokeSuspend(ContraintControllers.kt:62) at androidx.work.impl.constraints.controllers.BaseConstraintController$track$1.invoke(Unknown Source:8) at androidx.work.impl.constraints.controllers.BaseConstraintController$track$1.invoke(Unknown Source:4) at kotlinx.coroutines.flow.ChannelFlowBuilder.collectTo$suspendImpl(Builders.kt:316) at kotlinx.coroutines.flow.ChannelFlowBuilder.collectTo(Unknown Source:0) at kotlinx.coroutines.flow.CallbackFlowBuilder.collectTo(Builders.kt:330) at kotlinx.coroutines.flow.internal.ChannelFlow$collectToFun$1.invokeSuspend(ChannelFlow.kt:56) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104) at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:923) Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@ebe8c59, androidx.work.impl.utils.SerialExecutorImpl@bbb101e] 2024-11-25 12:12:37.444 29179-29179 chatty com.xcelcorp.cricdost I uid=10295(com.xcelcorp.cricdost) identical 4 lines Please give solution [/code] Я пытался обработать исключение с помощью Result.retry(). Когда код состояния HTTP == 429, дополнительно я добавил экспоненциальную отсрочку через 30 секунд.