Получение java.lang.IllegalStateException: текущий поток должен иметь петлитель

Я получаю эту ошибку, и мое приложение вылетает:

Java.lang.IllegalStateException: текущий поток должен иметь петлитель!

Я не очень разбирался в том, как использовать looper в Google, я использую потоки (в основном для функции сна), обработчик (для загрузки изображения при выполнении задачи Async) и Async (для получения данных JSON из URL-адреса) , Я не знаю, как решить эту проблему, поэтому любые предложения будут полезны.

Это код для потока, который выполняется при нажатии кнопки:

View view = flingContainer.getSelectedView(); view.findViewById(R.id.item_swipe_right_indicator).setAlpha((float) 1.0); Thread timer = new Thread() { public void run() { try { sleep(320); } catch (InterruptedException e) { e.printStackTrace(); } finally { flingContainer.getTopCardListener().selectLeft(); } } }; timer.start(); 

Я использую этот libray и log-cat: образ

Где: at com.enormous.quotesgram.MainActivity$3.run(MainActivity.java:479) в последнем в log-cat соответствует строке: flingContainer.getTopCardListener().selectLeft(); В вышеприведенном фрагменте кода.

Попробуйте следующее (к сожалению, я не могу проверить код):

 Thread timer = new Thread() { public void run() { try { sleep(320); } catch (InterruptedException e) { e.printStackTrace(); } finally { runOnUiThread(new Runnable() { @Override public void run() { flingContainer.getTopCardListener().selectLeft(); } }); } } }; 

Идея заключается в том, что поток Timer не является потоком Looper (в результате возникает исключение «Текущий поток должен иметь петлитель» ). Однако поток UI представляет собой поток Looper (см., Например, этот сайт ).

Как flingContainer.getTopCardListener().selectLeft() , вероятно, предназначен для запуска в потоке пользовательского интерфейса, который не выполняется, если он не вызван в стороне конвейерной нити.