Я пытаюсь выполнить 2 сетевых запроса, один за другим, но только первый идет, второй никогда не выполняется: Вот мой код
fun getData(todaysDateStart: Long, todaysDateEnd: Long) {
viewModelScope.launch(Dispatchers.IO) {
val job1 = async {
dataManager.getAllListsWithTaskCount()
.collect { taskListsFromDb: List<TaskListAndCount> ->
if (taskListsFromDb.isNotEmpty()) {
withContext(Dispatchers.Main) {
taskListAndCount.value = Resource.Success(taskListsFromDb)
}
} else {
withContext(Dispatchers.Main) {
taskListAndCount.value = Resource.Loading
}
val response = safeApiCall {
dataManager.getUserTaskLists(
dataManager.getUserId(),
dataManager.getAccessToken()
)
}
when (response) {
is Resource.Success -> {
val jsonObject = response.data.asJsonObject
if (jsonObject["success"].asBoolean) {
insertTaskListsInDb(jsonObject)
} else {
withContext(Dispatchers.Main) {
taskListAndCount.value =
Resource.Error(IOException(jsonObject.get("message").asString))
}
}
}
is Resource.Error -> {
withContext(Dispatchers.Main) {
taskListAndCount.value = response
}
}
}
}
}
}
job1.await()
val job2 = async {
dataManager.getTasksForToday(todaysDateStart, todaysDateEnd)
.collect { tasksAndListFromDb: List<TaskAndTaskList> ->
if (tasksAndListFromDb.isNotEmpty()) {
withContext(Dispatchers.Main) {
taskAndTaskList.value = Resource.Success(tasksAndListFromDb)
}
} else {
withContext(Dispatchers.Main) {
taskAndTaskList.value = Resource.Loading
}
val response = safeApiCall {
dataManager.getUserTasks(
dataManager.getUserId(),
dataManager.getAccessToken()
)
}
when (response) {
is Resource.Success -> {
val jsonObject = response.data.asJsonObject
if (jsonObject["success"].asBoolean) {
insertTasksInDb(jsonObject)
} else {
withContext(Dispatchers.Main) {
taskAndTaskList.value =
Resource.Error(IOException(jsonObject["message"].asString))
}
}
}
is Resource.Error -> {
withContext(Dispatchers.Main) {
taskListAndCount.value = response
}
}
}
}
}
}
job2.await()
}
}
private suspend fun insertTaskListsInDb(jsonObject: JsonObject) {
val taskListsJsonArray = jsonObject["task_lists"].asJsonArray
val taskListsFromNetwork: MutableList<TaskList> = arrayListOf()
taskListsJsonArray.forEach { taskListJsonElement: JsonElement ->
taskListsFromNetwork.add(
TaskList(
0,
taskListJsonElement.asJsonObject["list_slack"].asString,
taskListJsonElement.asJsonObject["name"].asString,
taskListJsonElement.asJsonObject["color"].asString
)
)
}
dataManager.insertTaskLists(taskListsFromNetwork)
}
private suspend fun insertTasksInDb(jsonObject: JsonObject) {
val tasksJsonArray = jsonObject["tasks"].asJsonArray
val tasksAndListFromServer = mutableListOf<Task>()
tasksJsonArray.forEach { taskJsonElement: JsonElement ->
tasksAndListFromServer.add(
Task(
0,
taskJsonElement.asJsonObject["user_task_id"].asString,
taskJsonElement.asJsonObject["task_slack"].asString,
taskJsonElement.asJsonObject["task"].asString,
taskJsonElement.asJsonObject["date_time"].asLong,
taskJsonElement.asJsonObject["list_slack"].asString
)
)
}
dataManager.insertTasks(tasksAndListFromServer)
}
job2.await
никогда не выполняется. Пожалуйста, помогите.
ОБНОВЛЕНИЕ 1: Я закончил тем, что сделал это, но он все еще не выполняет второй сетевой запрос:
un getData(todaysDateStart: Long, todaysDateEnd: Long) {
viewModelScope.launch {
dataManager.getAllListsWithTaskCount()
.collect { taskListsFromDb: List<TaskListAndCount> ->
if (taskListsFromDb.isNotEmpty())
taskListAndCount.value = Resource.Success(taskListsFromDb)
else {
taskListAndCount.value = Resource.Loading
val response = safeApiCall {
dataManager.getUserTaskLists(
dataManager.getUserId(),
dataManager.getAccessToken()
)
}
when (response) {
is Resource.Success -> {
val jsonObject = response.data.asJsonObject
if (jsonObject["success"].asBoolean) {
insertTaskListsInDb(jsonObject)
} else {
taskListAndCount.value =
Resource.Error(IOException(jsonObject.get("message").asString))
}
}
is Resource.Error -> {
taskListAndCount.value = response
}
}
}
}
dataManager.getTasksForToday(todaysDateStart, todaysDateEnd)
.collect { tasksAndListFromDb: List<TaskAndTaskList> ->
if (tasksAndListFromDb.isNotEmpty())
taskAndTaskList.value = Resource.Success(tasksAndListFromDb)
else {
taskAndTaskList.value = Resource.Loading
val response = safeApiCall {
dataManager.getUserTasks(
dataManager.getUserId(),
dataManager.getAccessToken()
)
}
when (response) {
is Resource.Success -> {
val jsonObject = response.data.asJsonObject
if (jsonObject["success"].asBoolean) {
insertTasksInDb(jsonObject)
} else {
taskAndTaskList.value =
Resource.Error(IOException(jsonObject["message"].asString))
}
}
is Resource.Error -> {
taskListAndCount.value = response
}
}
}
}
}
}