Отображение диалогового окна прогресса при выполнении нескольких вызовов дооснащения - PullRequest
0 голосов
/ 16 января 2019

Я хочу сделать список звонков, чтобы загрузить список картинок, показать диалог прогресса в начале и закрыть его в конце.Тем не менее, диалог прогресса никогда не появляется.Если я прокомментирую progresRing.dismiss (), то диалог появится, но позже.Есть ли лучший способ сделать несколько вызовов, чем в цикле for?

        val progresRing = ProgressDialog(this@AddExtraPicturesActivity)
        progresRing.isIndeterminate = true
        progresRing.setTitle("Uploading pictures")
        progresRing.setMessage("Please wait")
        progresRing.setCancelable(false)

        progresRing.show()
        for (item in pictureList) {

            if(item.pictureFile != null) {
                val file = item.pictureFile

                if(file!!.exists()) {
                    var fileData = Base64.encodeToString(FileUtils.readFileToString(file).toByteArray(), Base64.DEFAULT)

                    val transactionId = UUID.randomUUID().toString()
                    val tokenId = ""

                    val jobDocument = JobDocument("Test", "", "", "PHONE_PICTURE", "jpg", "test.jpg", "", fileData)
                    val requestBody = UploadDocumentRequest("Test", jobDocument)

                    val service = RestAPI(this@AddExtraPicturesActivity)


                    val request = service.uploadDocument(authorization, transactionId, tokenId, requestBody)

                    request.enqueue(object :  Callback<UploadDocumentResponse> {
                        override fun onResponse(call: Call<UploadDocumentResponse>, response: Response<UploadDocumentResponse>) {
                            Timber.d( response.toString())
                        }

                        override fun onFailure(call: Call<UploadDocumentResponse>, t: Throwable) {
                            Timber.d(t.toString())

                        }
                    })
                }
            }
        }
        progresRing.dismiss()

1 Ответ

0 голосов
/ 16 января 2019

Лучший способ достичь этого, безусловно, это использовать Реактивное программирование , чтобы вы могли иметь какой-то обратный вызов, когда все вызовы сделаны для выполнения другого действия.

Более простым способом было бы подсчитать общее количество звонков, которое вам нужно сделать, и сделать следующее:

// find here the total of calls you need to make before the loop
totalCount = ??
var = 0

// and later, as retrofit requests are asynchronous, on the last upload the condition will be valid and the progress should dismiss
request.enqueue(object :  Callback<UploadDocumentResponse> {
                    override fun onResponse(call: Call<UploadDocumentResponse>, response: Response<UploadDocumentResponse>) {
                        Timber.d( response.toString())
                        var = var + 1
                        if(var == totalCount)
                            progresRing.dismiss()
                    }

                    override fun onFailure(call: Call<UploadDocumentResponse>, t: Throwable) {
                        Timber.d(t.toString())

                    }
                })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...