Как ждать и выполнить код после AsyncHttpClient () Готово? - PullRequest
0 голосов
/ 28 января 2020

Я хочу получить данные из API с помощью AsyncHttpClient (), после этого я показываю данные для повторного просмотра. но при попытке отладки мой код запускается, покажите данные для перезаписи представления, которое не содержит данных, потому что еще не завершено sh setData с использованием AsyncHttpClient (). у меня вопрос, как запустить setData recycle view adapter после того, как мой setLeague завершает получение данных? Извините, я новичок ie, и я поставил свой код ниже. Пожалуйста, помогите, я уже пробовал использовать asyn c -wait, но не работает.

Это мой класс ViewModel

val footballLeagueList = MutableLiveData<ArrayList<league>>()

internal fun setLeague(){
    val client = AsyncHttpClient()
    val client2 = AsyncHttpClient()
    val listItems = ArrayList<league>()
    val leagueListUrl = "https://www.thesportsdb.com/api/v1/json/1/all_leagues.php"
    val leagueDetailUrl = "https://www.thesportsdb.com/api/v1/json/1/lookupleague.php?id="

    client.get(leagueListUrl, object : AsyncHttpResponseHandler(){
        override fun onSuccess(
            statusCode: Int,
            headers: Array<out Header>?,
            responseBody: ByteArray?
        ) {
            try{
                val result = String(responseBody!!)
                val responseObject = JSONObject(result)

                for(i in 0 until 10){
                    val list = responseObject.getJSONArray("leagues")
                    val leagues = list.getJSONObject(i)
                    val leaguesItems = league()
                    val detailUrl = leagueDetailUrl + leagues.getString("idLeague")
                    leaguesItems.id = leagues.getString("id")
                    leaguesItems.name = leagues.getString("strLeague")
                    leaguesItems.badgeUrl = leagues.getString( "https://www.thesportsdb.com/images/media/league/badge/dqo6r91549878326.png")
                    listItems.add(leaguesItems)
                }
                footballLeagueList.postValue(listItems)
            }catch (e: Exception){
                Log.d("Exception", e.message.toString())
            }
        }

        override fun onFailure(
            statusCode: Int,
            headers: Array<out Header>?,
            responseBody: ByteArray?,
            error: Throwable?
        ) {
            Log.d("Failed", "On Failure")
        }

    })

}

internal fun getLeague(): LiveData<ArrayList<league>> {
    return footballLeagueList
}

А это мой MainActivity

class MainActivity : AppCompatActivity() {

    private lateinit var mainViewModel: MainViewModel
    private lateinit var adapterLeague: leagueAdapter

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        adapterLeague = leagueAdapter()
        adapterLeague.notifyDataSetChanged()
        verticalLayout {
            lparams(matchParent, matchParent)
            recyclerView {
                layoutManager = GridLayoutManager(context, 2)
                adapter = adapterLeague
            }
        }

        mainViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory())
            .get(MainViewModel::class.java)

        mainViewModel.setLeague()

        mainViewModel.getLeague().observe(this, Observer { leaguesItems ->
            if(leaguesItems != null){
                adapterLeague.setData(leaguesItems)
           }
        })
    }
}
...