Мне нужно сделать тост Android из потока обработки, который настраивается для OpenCV, поэтому я не могу использовать runOnUiThread (), как предлагается здесь: Android: тост в ветке.
Большая часть этого кода взята из примера приложения CVCamera. Но те, кто незнакомы, когда я выбираю кнопку меню Surf, SURFProcessor вызывается так:
else if (item.getTitle().equals("SURF")) {
defaultcallbackstack.addFirst(new SURFProcessor());
toasts(DIALOG_TUTORIAL_SURF, "");
}
Этот поток процессора запускается так, что, когда я нажимаю кнопку камеры телефона (capturePress = true), снимается изображение и выполняется обработка. Я хочу вызвать метод тостов, как показано:
class SURFProcessor implements NativeProcessor.PoolCallback {
@Override
public void process(int idx, image_pool pool, long timestamp,
NativeProcessor nativeProcessor) {
if(capturePress) {
String processMsg = processor.processFeatures(idx, pool, cvcamera.DETECT_SURF);
capturePress = false;
toasts(PROCESS_MESSAGE, processMsg);
}
}
}
Вот метод тостов, расположенный в основном классе, расширяющем Activity:
void toasts(int id, String msg) {
switch (id) {
case PROCESS_MESSAGE:
Toast.makeText(MMRapp.this, msg, Toast.LENGTH_LONG).show();
break;
.........
Прямо сейчас этот код дает мне ошибку: «не могу создать обработчик внутри потока, который не вызвал Looper.prepare ()». Как мне вызвать метод тостов? Или возможно, чтобы метод тостов отслеживал изменение в processMsg? Если возможно, я могу обойтись отправкой processMsg или изменением переменной класса. По сути, мне нужно обновить строку из этого потока процессора.
Большое спасибо, и я предоставлю дополнительную информацию / код, если хотите.
-Tom