我正在尝试使用 android 中的库连接到终端仿真器,这将连接到串行设备并应该向我显示发送/接收的数据。要附加到终端会话,我需要向 setTermIn(InputStream) 提供输入流,向 setTermOut(OutputStream) 提供输出流。
但是,当我如下声明流时,它们默认为 null 不是吗?
private OutputStream bos;
private InputStream bis;
...
//inside onCreate() method
session.setTermIn(bis);
session.setTermOut(bos);
/* Attach the TermSession to the EmulatorView. */
mEmulatorView.attachSession(session)
因此,当我尝试将流附加到会话时,出现错误:
FATAL EXCEPTION: TermSession input reader
java.lang.NullPointerException at jackpal.androidterm.emulatorview.TermSession$2.run(TermSession.java:137)
它指向库中的这段代码:
public void run()
{
try
{
while (true)
{
int read = mTermIn.read(mBuffer);
if (read == -1)
{
// EOF -- process exited
return;
}
mByteQueue.write(mBuffer, 0, read);
mMsgHandler.sendMessage(mMsgHandler.obtainMessage(NEW_INPUT));
}
}
catch (IOException e)
{
}
catch (InterruptedException e)
{
}
}
这是因为我还没有开始发送和接收数据,所以我还没有将数据分配给流。我该怎么做,设置一些虚假数据以分配给流?我试过了,它仍然抱怨。也许我做错了。
要发送和接收数据,我有以下方法,尽管我不应该在每次调用它们时都设置流。
覆盖通过串行发送数据以设置流的方法,只要我按回车键就会运行:
public void sendData(byte[] data)
{
bos = new ByteArrayOutputStream(data.length);
}
每当接收到数据时运行:
public void onDataReceived(int id, byte[] data)
{
bis = new ByteArrayInputStream(data);
}
如何正确初始化这些?我真的应该在每次发送和接收数据时都设置流吗,这有关系吗?还是我应该做一些检查?