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)
{
}
}
これは、まだデータの送受信を開始していないため、データをストリームに割り当てていないためです。スプリアス データを設定してストリームに割り当てるにはどうすればよいですか? 私はそれを試しましたが、それでも文句を言います。おそらく私はそれを間違っています。
データを送受信するには、次のメソッドがありますが、それらを呼び出すたびにストリームを設定する必要はないと思います。
シリアル経由でデータを送信してストリームを設定するメソッドをオーバーライドすると、Enter キーを押すたびに実行されます。
public void sendData(byte[] data)
{
bos = new ByteArrayOutputStream(data.length);
}
データが受信されるたびに実行されます。
public void onDataReceived(int id, byte[] data)
{
bis = new ByteArrayInputStream(data);
}
これらを正しく初期化するにはどうすればよいですか? また、データを送受信するたびにストリームを設定する必要がありますか?それは問題ですか? それとも、私はいくつかのチェックを行う必要がありますか?