将数据写入屏幕两次而不是一次

时间:2013-01-22 16:16:23

标签: java android terminal

我使用android中的库连接到终端模拟器,它连接到串行设备(交换机)并显示发送/接收的数据。我使用另一个库通过串行发送数据。我通过终端下方的文本框通过连接发送数据,或者通过键入终端本身并在两种情况下按键盘输入。当我通过editText发送时,一切正常。数据在终端上发送和接收并显示。

但是当我选择终端并输入字符时,它们会显示在屏幕上并直接发送到write方法,而不是通过串行发送。如果我通过write方法从串行发送它们,它们会在终端上显示两次。

在我的活动中,我有一个名为sendOverSerial的方法,它只调用库方法通过串行发送数据。它发送数据,然后从串行设备接收数据,并自动调用onDataReceieved

public static void sendOverSerial(byte[] data) {

    if(mSelectedAdapter !=null && data !=null){
    mSelectedAdapter.sendData(data);

  }}

收到数据时调用的方法:

 public void onDataReceived(int id, byte[] data) {

            dataReceived = new String(data);
            dataReceivedByte = data;
            statusBool = true;
            Log.d(TAG, "in data received " + dataReceived);
            ((MyBAIsWrapper) bis).renew(data);


            runOnUiThread(new Runnable(){

                @Override
                public void run() {

                    //this line writes to the terminal
                    mSession.appendToEmulator(dataReceivedByte, 0, dataReceivedByte.length);
                }});

            viewHandler.post(updateView);
        }

通常当我想通过串口发送数据时,通过editText和按钮我在活动中调用sendOverSerial方法。但是当我将字符写入终端本身时,它们会在不同的类中写入方法。我的问题是,如果我从收到数据的实例调用sendOverSerial方法,它会被写入屏幕两次,一次按下键,然后再次通过串口发送数据并调用onDataReceived。

这是第二节中的write方法:

 public void write(byte[] bytes, int offset, int count) {


//this line ends up calling onDataReceived which writes to the terminal again
//I need it to send the data over serial
             GraphicsTerminalActivity.sendOverSerial(data);
     if (isRunning()) {
                 //this line writes to the terminal
                 //I need this line for my editText data to be written to the screen
         doLocalEcho(bytes);
     }
     return;
 }

doLocalEcho:

private void doLocalEcho(byte[] data) {
        String str = new String(data);
        appendToEmulator(data, 0, data.length);
        notifyUpdate();
    }

我在终端上输入一个字符,这个字符会自动发送到write。这里用super.write(bytes, offset, count);写入屏幕,但调用下一个GraphicsTerminalActivity.sendOverSerial(data);,它通过串行发送数据并从串行设备中引入回声,这意味着onDataReceived会将字符写入屏幕试。

如何更改代码,以便屏幕上只显示一个字符? 如果我将GraphicsTerminalActivity.sendOverSerial(bytes);移至onDataRecieved,则会发生无限循环,因此我无法将其放在那里。

0 个答案:

没有答案