Anko выполняет запрос sqlite, но не выполняет следующие строки - PullRequest
1 голос
/ 11 июня 2019

Я хочу сделать запрос на мою внутреннюю базу данных на Android, но когда мой запрос Anko будет выполнен, строки, присутствующие в UiThread, не будут выполнены немедленно.

Чтобы объяснить, что происходит, строка «Log.d» выполняется перед UiThread

Можете ли вы помочь мне?

for(i in 0 until jsonArrayM.length()) {
        val json = jsonArrayM.getJSONObject(i)
        doAsync {
            val carteByName = bdd.getDatasByName(json.get("role").toString())
            uiThread {
                json.put("id", carteByName[0].id)
                json.put("image", carteByName[0].imageCarte)
                json.put("nuit1", carteByName[0].premiereNuit)
                json.put("posNuit1", carteByName[0].positionPremiereNuit)
                json.put("autresNuits", carteByName[0].nuitSuivante)
                json.put("posAutresNuits", carteByName[0].positionNuitSuivante)
            }
        }
        jsonArray.put(json)
    }
    Log.d("Verif", jsonArray.toString())

1 Ответ

1 голос
/ 11 июня 2019

Блок внутри doAsync выполняется асинхронно в фоновом потоке, а блок внутри uiThread выполняется только в конце вашего асинхронного блока (но в потоке пользовательского интерфейса / основного потока).
С другой стороны, Log выполняется синхронно после цикла.
Таким образом, ожидается, что код внутри асинхронного блока будет выполнен после синхронного кода.

...