Поставщик контента возвращает курсор в асинхронном режиме - PullRequest
0 голосов
/ 04 июля 2019

У меня есть 2 приложения для Android, первое (написанное на Kotlin) предоставляет данные для второго приложения с помощью контент-провайдера. Как я могу вернуть курсор в функцию запроса асинхронно?

**In ContentProvider class**

 override fun query(p0: Uri, p1: Array<String>?, p2: String?, p3: Array<String>?, p4: String?): Cursor? {
        val cursor = MatrixCursor(arrayOf("id", "name"))

        // async fun
        ContactsHelper(context).getContacts {
            for (contact in it) {
                cursor.newRow()
                        .add("id", contact.contactId)
                        .add("name", contact.firstName)
            }
        }

        return cursor
    }


**in ContactsHelper class**

fun getContacts(ignoredContactSources: HashSet<String> = HashSet(), callback: (ArrayList<Contact>) -> Unit) {
        Thread {    
                callback(...)            
        }.start()
    }

Возвращенный курсор не содержит данных. Как я могу добавить данные в курсор и затем вернуть его?

1 Ответ

0 голосов
/ 04 июля 2019

Как я могу вернуть курсор в функции запроса асинхронно?

Вы не можете.query() должен быть синхронным.

...