Android.net.ConnectivityManager$TooManyRequestsException для синхронизации данныхJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Android.net.ConnectivityManager$TooManyRequestsException для синхронизации данных

Сообщение Anonymous »

Ниже приведен мой класс ScoreSyncAPIWorker для синхронизации результатов матчей с сервером.

Код: Выделить всё

package com.xcelcorp.matchscoring.scoring.utils

import android.content.Context

import androidx.work.*

import com.xcelcorp.cricdost.app.SocketIOHandler

import com.xcelcorp.cricdost.repository.AppRepository

import com.xcelcorp.matchscoring.database.DbUtil

import com.xcelcorp.matchscoring.utils.AppBroadcasters

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"
}
}
у меня есть исключение:

Код: Выделить всё

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 секунд.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -sync-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»