初始化套接字时出现空指针异常

时间:2014-01-08 08:33:10

标签: android

我创建了一个与串口通信的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?

1 个答案:

答案 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;
        }

}