Мне нужно сделать тост 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);
}
}
}
Вот метод toasts, расположенный в главном классе, расширяющем Activity:
void toasts(int id, String msg) {
switch (id) {
case PROCESS_MESSAGE:
Toast.makeText(MMRapp.this, msg, Toast.LENGTH_LONG).show();
break;
.........
Прямо сейчас этот код выдает мне ошибку: «не удается создать обработчик внутри потока, который не вызвал Looper.prepare ()». Как мне вызвать метод тостов? Или возможно, чтобы метод toasts прослушивал изменения в processMsg? Если возможно, я могу обойтись отправкой processMsg или изменением переменной класса. По сути, мне нужно обновить строку из этого потока процессора.
Большое спасибо, и я предоставлю дополнительную информацию / код, если хотите.
-Т