Вызовите модификацию внутри другого матода и верните результат в основной поток

напишите этот код:

fun getStoreTitles():List<sample> {
        var responseResult:List<sample>
        responseResult= listOf(sample("","",""))
        val service = getRetrofitInstance()!!.create(GetDataService::class.java)
        val call = service.getAllPhotos()
        call.enqueue(object : Callback<List<sample>> {
            override fun onResponse(call: Call<List<sample>>, response: Response<List<sample>>) {
                responseResult=response.body()!!
                var t=0
            }
            override fun onFailure(call: Call<List<sample>>, t: Throwable) {
                /*progressDoalog.dismiss()*/
                //Toast.makeText(this@MainActivity, "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show()
            }
        });
        return responseResult
}

и хотите вызвать этот метод из основного действия следующим образом:

var responseResult:List<sample>
val FrameWork=StoreTitle()
responseResult=FrameWork.getStoreTitles()

при запуске приложения модернизация выполняется успешно, но ничего не возвращается к ответному результату, и это значение равно null, я думаю, что модернизация запускает другой поток, и это причина. Как я могу решить эту проблему?

API вызовет фоновый поток и вернет ответ в методе onResponse(). поэтому вы всегда будете получать нулевое значение, потому что метод getStoreTitles() вернет значение до того, как API получит успех.

Rajasekaran M 22.05.2019 12:29

использовать обратный вызов для получения результатов API

Rajasekaran M 22.05.2019 12:30

@RajasekaranM, как я могу использовать обратный вызов?

behzad razzaqi 22.05.2019 12:32

проверить мой ответ

Rajasekaran M 22.05.2019 13:21
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
4
244
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновите метод вызова API:

fun getStoreTitles(callback : Callback<List<sample>>) {
    var responseResult:List<sample>
    responseResult= listOf(sample("","",""))
    val service = getRetrofitInstance()!!.create(GetDataService::class.java)
    val call = service.getAllPhotos()
    call.enqueue(callback);

}

вы должны вызвать так:

val FrameWork=StoreTitle()
FrameWork.getStoreTitles(object : Callback<List<sample>> {
        override fun onResponse(call: Call<List<sample>>, response: Response<List<sample>>) {
         val responseResult : List<sample>? =response.body()      
         //handle your success
        }
        override fun onFailure(call: Call<List<sample>>, t: Throwable) {
             //handle your failure
        }
    })

зачем создавать новый интерфейс обратного вызова, когда вы можете использовать Retrofit Callback (тот, который вам нужно предоставить методу enqueue?

user2340612 22.05.2019 15:58

хороший вопрос, но он обработал свой вызов API в отдельном классе, поэтому

Rajasekaran M 22.05.2019 16:04

верно, но поскольку другой класс должен реализовать APICallback в вашем примере, почему бы не реализовать Callback Retrofit напрямую? Концептуально они делают одно и то же, т.е. обрабатывают ответ/сбой.

user2340612 22.05.2019 16:07

да вы правы, я не думаю об этом. спасибо :-) обновлю ответ

Rajasekaran M 22.05.2019 16:09

@RajasekaranM в этой строке --> <List<sample>> responseResult=response.body()!! get Ожидается вызов функции 'List<sample>(...)'

behzad razzaqi 24.05.2019 16:26

@behzadrazzaqi проверь сейчас

Rajasekaran M 24.05.2019 16:39

Другие вопросы по теме