0

我正在使用 android 中的库连接到终端仿真器,它连接到串行设备(开关)并显示发送/接收的数据。我通过终端下方的文本框或在终端本身输入并在两种情况下按键盘上的 Enter 键通过连接发送数据。我也可以通过按键发送命令。

我的问题是,每当突出显示终端本身时,UI 都不会更新,例如使用按钮发送的命令或从串行设备接收的数据。我可以输入终端本身,然后字符就会出现。如果选择了 editText,一切都会更新。因此,如果我选择终端并发送命令,则只有在选择 editText 后才会显示在屏幕上。很多时候,在我选择了 editText 之后,它仍然不会更新,直到我再次按下终端。很奇怪。所以我的无效工作不好?还是我正在使用的 notifyUpdate 方法并不太了解?

我目前所做的是在接收到数据时调用一个方法,该方法调用一个处理程序,该处理程序每​​ 1000 毫秒更新一次屏幕。This however does not work when the terminal is selected, why is this? 我收到错误消息:“只有创建视图层次结构的原始线程才能触及其视图。”</p>

截图:http: //i.imgur.com/s4mTt.png

    //terminal view
    EmulatorView view = (EmulatorView) findViewById(R.id.emulatorView);
    mEmulatorView = view;

    public void onDataReceived(int id, byte[] data)
    {
    dataReceived = new String(data);
    ((MyBAIsWrapper) bis).renew(data);
    mSession.write(dataReceived);
    mSession.notifyUpdate();
    viewHandler.post(updateView);
    }

    Handler viewHandler = new Handler();
    Runnable updateView = new Runnable() {
    @Override
    public void run() {
    mEmulatorView.invalidate();
    viewHandler.postDelayed(updateView, 1000);

        }
    }
};

我正在使用的库中的相关代码:

 [code]protected void notifyUpdate() {
        if (mNotify != null) {
            mNotify.onUpdate();
        }
    }[/code]

/**
 * Generic callback to be invoked to notify of updates.
 */
public interface UpdateCallback {
    /**
     * Callback function to be invoked when an update happens.
     */
    void onUpdate();
}

这是方法 notifyUpdate() 的说明 - 类 jackpal.androidterm.emulatorview.TermSession 中的方法 通知 setUpdateCallback 注册的 UpdateCallback 屏幕发生了变化。

我认为可能是 mSession.notifyUpdate(); 在我的代码中,但显然如果我评论说发生了同样的错误,那条线似乎对我没有任何作用。我不确定错误在哪里修复它,以便无论我在哪里按,我的屏幕总是在更新。

4

1 回答 1

0

得到它的工作,我只需要在 UI 线程中运行该写入行,即使我认为它是?!

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

        dataReceived = new String(data);
        ((MyBAIsWrapper) bis).renew(data);

        runOnUiThread(new Runnable(){
            @Override
            public void run() { 
                mSession.write(dataReceived);       
            }});

        viewHandler.post(updateView);
    }
于 2013-01-18T12:29:20.360 回答