我正在使用android中的库连接到终端模拟器,这连接到串行设备(开关)并显示我发送/接收的数据。我通过终端下面的文本框发送数据,或者在终端上输入数据,然后在键盘上按回车键。我也可以通过按键发送命令。
我的问题是,每当终端本身突出显示UI不更新时,就像在与按钮一起发送的命令或从串行设备接收的数据一样。我可以在终端中输入,然后字符就会出现。如果选择了editText,一切都会更新得很好。因此,如果我选择终端并发送命令,只有在选择editText后,它才会显示在屏幕上。很多时候,在我选择editText之后,它仍然没有更新,直到我再次按下终端。很奇怪。所以我的无效程序不能正常工作?或者是这个notifyUpdate方法,我正在使用和不真正理解?
我目前做的是在接收数据时调用一个方法,这个方法调用一个处理程序,它每1000毫秒更新一次屏幕。然而,当选择终端时,这不起作用,为什么会这样?我得到的错误:"只有创建视图层次结构的原始线程可以触摸它的视图。"
截图:https://i.stack.imgur.com/1m26B.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屏幕已经改变
我认为它可能是session . notifyupdate ();在我的代码中,但显然,如果我注释掉同样的错误发生,那行似乎对我什么也没做。我不确定在哪里的错误是修复它,所以我的屏幕总是被更新,无论我在哪里按
让它工作,我只需要在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);
}