Использование Retrofit 2 в классе Intent Service - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь получить данные с сервера и синхронизировать c на фоне приложения. Я сделал это с помощью AsyncTask в классе Intent Service, но теперь я хочу сделать сетевой вызов с помощью Retrofit. Итак, я получил данные с сервера, используя модернизацию, но пока я сохраняю их в локальной базе данных, основной поток зависает, только после завершения процесса я могу что-то сделать в главном потоке. Почему это происходит?

Я пробовал синхронный и асинхронный запросы на модернизацию, но проблема остается. Это то, что я пробовал до сих пор ..

//calling company api in synchronus way

    try {
        val responseCompany = apiService.company(page, headers, bodyModel).execute()
        Log.e("onResponse", "Company Response Code: ${responseCompany.code()}")
        Log.e("onResponse", "Company Response Body: ${Gson().toJson(responseCompany.body())}")

        if (responseCompany.isSuccessful) {
            val response = responseCompany.body()

            //delete company data
            if (response?.delete?.data?.size!! > 0) {
                for (i in response.delete.data.indices) {

                    val delete = response.delete.data[i]
                    Log.e(tag, "Delete Company data $i: ${delete.company_id}")
                    dbAdapter.open()
                    dbAdapter.Delete_COMPANY_NAME(delete.company_id)
                    dbAdapter.close()
                }
            }

            //insert company data
            if (response.insert.data.isNotEmpty()) {
                for (i in response.insert.data.indices) {
                    val insert = response.insert.data[i]
                    Log.e(tag, "Insert company data $i: ${insert.company_id}")
                    dbAdapter.open()
                    dbAdapter.Insert_COMPANY_NAME(insert.company_id.toString(), insert.company_name)
                    dbAdapter.close()
                }
            }

            //update company data
            if (response.update.data.isNotEmpty()) {
                for (i in response.update.data.indices) {
                    val update = response.update.data[i]
                    Log.e(tag, "Update Company data $i: ${update.company_id}")
                    dbAdapter.open()
                    dbAdapter.Update_COMPANY_NAME(update.company_id.toString(), update.company_name)
                    dbAdapter.close()
                }
            }

            val totalPage = largest(response.delete.meta.pagination.total_pages, response.insert.meta.pagination.total_pages, response.update.meta.pagination.total_pages)


                    if (page < totalPage) {
                        prefManager.pageNumber = page + 1
                        bodyModel.date = lastAdUpdate2
                        bodyModel.limit = 500
                        companyData(bodyModel)
                    } else {
                        prefManager.T_COMPANY_NAME = currentTime
                        prefManager.PAGE_NUMBER = 1
                        prefManager.TOTAL_PAGE = 1
                        prefManager.pageNumber = 1
                        prefManager.FIRST = "1"
                        pagenumber = prefManager.PAGE_NUMBER

                        Handler().postDelayed({
                            bodyModel.limit = 100
                            bodyModel.date = lastAdUpdate3
                            generics(bodyModel)
                        }, 1000)
                    }
        } else {
            prefManager.dbUpdateStatus = false
            Log.i("dataNotInsert", "data Not Insert")
        }

    } catch (e: Exception) {
        Log.e("Exception", "Company: ${e.localizedMessage}")
        e.printStackTrace()
    }

Примечание: я сделал сетевой вызов (запрос на модернизацию) в классе обслуживания по намерениям.

Любая помощь очень ценится. Спасибо

...