Мне нужно сделать тост 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