我创建了一个与串口通信的Android蓝牙程序。在我的程序中,我有3个按钮:Connect,Select&断开。 Connect用于启用蓝牙。 Select用于从串口检索数据。断开连接是为了断开蓝牙和我获取的用于检索数据的套接字,并将套接字初始化为null。
btnDisConnect.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try{
mBluetoothAdapter.disable();
mmSocket.close();
mmSocket=null;
} catch(Exception e) {
Toast.makeText(getApplicationContext(), "Unable to Close.Try again", Toast.LENGTH_LONG).show();
}
}
});
我的问题是当我尝试将套接字初始化为null时,它显示Null Pointer异常。 我想将此套接字设为null以进行进一步的工作。如何在buttonclick上将其设为null?
答案 0 :(得分:0)
请记得首先关闭输入/输出流,然后关闭套接字。
通过关闭流,您可以启动断开连接过程。关闭套接字后,连接应完全分解。
如果在流之前关闭套接字,则可能会绕过某些关闭步骤,例如(正确)关闭物理层连接。
这是我在分解连接时使用的方法。
/**
* Reset input and output streams and make sure socket is closed.
* This method will be used during shutdown() to ensure that the connection is properly closed during a shutdown.
* @return
*/
private void resetConnection() {
if (mBTInputStream != null) {
try {mBTInputStream.close();} catch (Exception e) {}
mBTInputStream = null;
}
if (mBTOutputStream != null) {
try {mBTOutputStream.close();} catch (Exception e) {}
mBTOutputStream = null;
}
if (mBTSocket != null) {
try {mBTSocket.close();} catch (Exception e) {}
mBTSocket = null;
}
}