Eventbus () с выполняемой функцией make более одного раза - PullRequest
0 голосов
/ 23 октября 2018

У меня есть eventbus внутри исполняемого файла, который должен работать бесконечно с интервалом (2) две секунды.Я также использую scheduledExecutorService = Executors.newScheduledThreadPool(4);

это мой onResume()

EventBus.getDefault().register(this);
        rfscanner = scheduledExecutorService.scheduleAtFixedRate(mRunnable, 0, 2, TimeUnit.SECONDS);

 private final Runnable mRunnable = new Runnable() {
    @Override
    public void run() {
        // Open RF Card interface
        Log.e("test why", "test");
        EventBus.getDefault().post(new EB_TapCard());
    }
};

Внутри моего EventBus() есть функция для RFCard Reader.

private void validateCard(){
    try {
        RFCardInterface.waitForCardPresent(RFCardInterface.CONTACTLESS_CARD_MODE_AUTO, 1, -1);
        if (RFCardInterface.isCallBackCalled &&
                RFCardInterface.notifyEvent.eventID == RFCardInterface.CONTACTLESS_CARD_EVENT_FOUND_CARD) {

            int counter = 0;

            Log.e("test","test " + String.valueOf(counter+=1));

            IDCatcher = StringUtility.ByteArrayToString(RFCardInterface.notifyEvent.eventData,
                    RFCardInterface.notifyEvent.eventData.length).substring(9, 21).replace(" ", "");

            Cursor c = dbhelper.getReadableDatabase().rawQuery("select * from trans_settings order by _id desc limit 1", null);

            if (c != null && c.moveToFirst()) {
                String is_dispatched = c.getString(c.getColumnIndex(DBHelper.TRANS_IS_DISPATCH));
                String is_arrived = c.getString(c.getColumnIndex(DBHelper.TRANS_IS_ARRIVED));
                String is_closed = c.getString(c.getColumnIndex(DBHelper.TRANS_IS_CLOSED));
                c.close();

                dispatch_code = dispatch_status;
                if (is_dispatched.equals("1") && is_arrived.equals("1") && is_closed.equals("1")) {
                    SearchEmp_Name();
                } else if (is_dispatched.equals("1") && is_arrived.equals("1") && is_closed.equals("0")) {
                    SecondTripDisp();
                    if (dispatchProgressOverlay.getVisibility() == View.VISIBLE) {
                        dispatchProgressOverlay.setVisibility(View.GONE);
                    }
                    if (getActivity() != null) {
                        getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
                    }

                } else if (is_dispatched.equals("0") && is_arrived.equals("0") && is_closed.equals("1")) {
                    SearchEmp_Name();
                } else {
                    Log.e("TAG", "UNEXPECTED ERROR");
                }
            } else {
                SearchEmp_Name();
            }
        }else{
            Log.e("Card is Reading","Card is Reading");
        }
    } catch (Throwable e) {
        e.printStackTrace();
    }
}

Runnable работает так, как есть.Основная проблема заключается в том, что если я оставлю считывающее устройство на пару секунд и нажму на RFCard, он обрабатывается несколько раз.Я просто хочу сделать этот процесс один раз, так как у меня есть проверка

(RFCardInterface.isCallBackCalled &&
                RFCardInterface.notifyEvent.eventID == RFCardInterface.CONTACTLESS_CARD_EVENT_FOUND_CARD)

извините за мое плохое объяснение.Я приведу пример.

Запуск моего приложения -> Открывается RFCardReader -> Запускается бесконечно -> Если я позволю, если в течение 10 секунд -> Процесс шины событий (5)раз.

Это логи

Logs

А это мои SQLite Database

SQLite Database

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...