具有可运行make函数的Eventbus()不止一次

时间:2018-10-23 02:08:25

标签: android multithreading scheduledexecutorservice event-bus futuretask

我在一个可运行对象中有一个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读取器的功能。

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

0 个答案:

没有答案