Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 18.02.2019
Сообщений: 7

Как исправить ошибку Can't create handler inside thread that has not called Looper.prepare() на Kotlin?

19.12.2020, 11:18. Показов 1762. Ответов 0

Студворк — интернет-сервис помощи студентам
У меня есть activity в котором я подключаюсь к веб-сокету. Он должен присылать сообщения с помощью которых я буду заполнять список, а уже с помощью списка заполняется recycler view

activity:

Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class ShowTariffsActivity : AppCompatActivity() {
 
    var tariffList : ArrayList<WebSocketResponse> = arrayListOf()
 
    var adapter: TarrifsAdapter? = null
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_show_tariffs)
 
        val departureId = intent.getIntExtra("id", 0)
 
        val client = OkHttpClient.Builder()
            .readTimeout(3, TimeUnit.SECONDS)
            .build()
        val request = Request.Builder()
            .url("ws://68.183.30.45/ws/calculation/${departureId}/")
            .build()
        val wsListener = WebSocketList()
        val webSocket = client.newWebSocket(request, wsListener)
 
        rcViewTarrif.hasFixedSize()
        rcViewTarrif.layoutManager = LinearLayoutManager(this)
        adapter = TarrifsAdapter(tariffList, this)
        rcViewTarrif.adapter = adapter
    }
 
    private class WebSocketList: WebSocketListener() {
        override fun onMessage(webSocket: WebSocket, text: String) {
            val tarrifs = ShowTariffsActivity()
            val result = Klaxon().parse<WebSocketResponse>(text)
 
            if (result != null) {
                tarrifs.tariffList.add(result)
            }
 
        }
 
        override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
            webSocket.close(NORMAL_CLOSURE_STATUS, null)
        }
 
        override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
            Log.d("WebSocket", t.message.toString())
        }
 
        companion object {
            private val NORMAL_CLOSURE_STATUS = 1000
        }
    }
}
error:
Code
1
2
3
4
5
6
2020-12-18 02:49:50.486 13152-13519/? D/WebSocket: Can't create handler inside thread that has not called Looper.prepare()
2020-12-18 18:18:51.692 13912-14078/? D/WebSocket: Can't create handler inside thread that has not called Looper.prepare()
2020-12-18 18:23:21.269 15026-15102/? D/WebSocket: Can't create handler inside thread that has not called Looper.prepare()
2020-12-18 18:37:00.410 15197-15268/? D/WebSocket: Can't create handler inside thread that has not called Looper.prepare()
2020-12-18 18:38:10.729 15361-15438/? D/WebSocket: Can't create handler inside thread that has not called Looper.prepare()
2020-12-18 18:49:23.152 16017-16088/com.example.kenguruexpress D/WebSocket: Can't create handler inside thread that has not called Looper.prepare()
Пробовал находить альтернативу и нашёл:

Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_show_tariffs)
 
        val departureId = intent.getIntExtra("id", 0)
 
        Handler(Looper.getMainLooper()).post {
            testWSS(departureId)
        }
 
        rcViewTarrif.hasFixedSize()
        rcViewTarrif.layoutManager = LinearLayoutManager(this)
        adapter = TarrifsAdapter(tariffList, this)
        rcViewTarrif.adapter = adapter
    }
 
    private fun testWSS(id: Int) {
        val ws = WebSocketFactory().createSocket("ws://68.183.30.45/ws/calculation/$id/", 5000)
 
        ws.addListener(object : WebSocketAdapter() {
            override fun onTextMessage(websocket: WebSocket?, text: String?) {
                super.onTextMessage(websocket, text)
 
                val result = Klaxon().parse<WebSocketResponse>(text!!)
                tariffList.add(result!!)
            }
 
            override fun onTextMessageError(websocket: WebSocket?, cause: WebSocketException?, data: ByteArray?) {
                super.onTextMessageError(websocket, cause, data)
                Log.d("WebSocket", cause?.message.toString())
            }
 
            override fun onCloseFrame(websocket: WebSocket?, frame: WebSocketFrame?) {
                super.onCloseFrame(websocket, frame)
                Log.v("WSS", "closing socket")
            }
        })
    }
вызов так же изменил, вроде как правильно, но всё равно список tarrifList оказывается пустым, то есть сообщений от веб сокета я не получаю, в чём может быть проблема?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2020, 11:18
Ответы с готовыми решениями:

Can't create handler inside thread that has not called Looper.prepare()
Привет всем. У меня есть програмка которая должна принимать Json, тут я использую AsyncTask и библиотеку Ok3Http. Проблема заключается в...

Can't create handler inside thread that has not called Looper.prepare()
Привет, с Новым Годом! Подскажите почему приложение вылетает с ошибкой при показе progressdialog. Ошибка: ...

Как вытащить данные из потока. Cant create handler inside thread that has not called Looper.prepare()
В общем столкнулся со следующей неприятной проблемой. Есть клиент. Он запрашивает у сервера некоторые данные. Сервер эти данные посылает...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.12.2020, 11:18
Помогаю со студенческими работами здесь

Ошибка при Looper.prepare
Соизвольте помочь мне, есть тривиальная задача: создать поток который будет принимать и обробатывать сообщения через handlerб, вот код ...

() 0xfffffff9
&lt;syknal homdler caltid&gt;() 0xfffffff9 Подскажите пожалуйста что это такое и как с этим бороться.

как исправить ошибку "Cannot create ActiveX component."
Здравствуйте. Есть сайт. на нем страница отправки сообщения. есть textbox-ы и button. По нажатию на кнопку выдает ошибку: Cannot create...

Как исправить проблему с Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
Exception in thread &quot;JavaFX Application Thread&quot; java.lang.NullPointerException at...

MS Access - как же изничтожить в запросах ошибку синтаксиса CONSTRAINT и ошибку инструкции CREATE TABLE?
Доброго времени суток, люди добрые! Возникла проблема на ровном месте - при попытке выполнить запросы для создания таблиц 2 и 3 в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru