时代逆子 2016-08-17 09:09 采纳率: 0%
浏览 4447
已结题

安卓蓝牙,BluetoothAdapter.getRemoteDevice()报错

 public class PathFragment extends Fragment {

    private Button scanBT;
    public static final int MY_PERMISSION_REQUEST_CONSTANT = 1;

    public static final int MESSAGE_STATE_CHANGE = 1;
    public static final int MESSAGE_READ = 2;
    public static final int MESSAGE_WRITE = 3;
    public static final int MESSAGE_DEVICE_NAME = 4;
    public static final int MESSAGE_TOAST = 5;

    // Key names received from the BluetoothChatService Handler
    public static final String DEVICE_NAME = "device_name";
    public static final String TOAST = "toast";

    // Intent请求码
    private static final int REQUEST_CONNECT_DEVICE = 1;
    private static final int REQUEST_ENABLE_BT = 2;
    private static final int REQUEST_NEW_CARD = 3;

    private String mConnectedDeviceName = null;
    private BluetoothAdapter mBluetoothAdapter = null;
    private BluetoothService mBlueService = null;
    String recieveStr = "";//暂存当前发过来的字节
    int n = 0;

    MyDatabaseHelper myDatabaseHelper;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View pathLayout = inflater.inflate(R.layout.path_layout, container, false);
        return pathLayout;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {//当Activity中的onCreate方法执行完后调用。
        super.onActivityCreated(savedInstanceState);
        //打开数据库
        myDatabaseHelper = new MyDatabaseHelper(getActivity(),"csport.db",null,1);
        initViews();
        scanBT.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent serverIntent = new Intent(getActivity(), DeviceListActivity.class);
                startActivityForResult(serverIntent,REQUEST_CONNECT_DEVICE);
            }
        });

    }



    private void initViews() {
        scanBT = (Button)getActivity().findViewById(R.id.button_scan);
    }
    public void onDestroy() {
        super.onDestroy();
        // Stop the Bluetooth chat services
        if (mBlueService != null) mBlueService.stop();
    }

    @Override
    public synchronized void onResume() {
        super.onResume();
        // Performing this check in onResume() covers the case in which BT was
        // not enabled during onStart(), so we were paused to enable it...
        // onResume() will be called when ACTION_REQUEST_ENABLE activity returns.
        if (mBlueService != null) {
            // Only if the state is STATE_NONE, do we know that we haven't started already
            if (mBlueService.getState() == BluetoothService.STATE_NONE) {
                // Start the Bluetooth chat services
                mBlueService.start();
            }
        }
    }

    //处理线程返回信息
    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MESSAGE_STATE_CHANGE://1
                    Toast.makeText(getActivity(), "change", Toast.LENGTH_LONG);
                    switch (msg.arg1) {
                        case BluetoothService.STATE_CONNECTED:
                            //mTitle.setText(R.string.title_connected_to);
                            //mTitle.append(mConnectedDeviceName);
                            //mConversationArrayAdapter.clear();
                            break;
                        case BluetoothService.STATE_CONNECTING:
                            //mTitle.setText(R.string.title_connecting);
                            break;
                        case BluetoothService.STATE_LISTEN:
                        case BluetoothService.STATE_NONE:
                            //mTitle.setText(R.string.title_not_connected);
                            break;
                    }
                    break;
                //发送了信息,显示在本地屏幕上(重写,显示结果即可)
                case MESSAGE_WRITE://2
                    Toast.makeText(getActivity(), "发送成功", Toast.LENGTH_LONG);

                    break;
                //收到了信息,显示在本地屏幕上(重写,加入到通信录中)
                case MESSAGE_READ://3读取数据

                    byte[] readBuf = (byte[]) msg.obj;
                    recieveStr = new String(readBuf, 0, msg.arg1);

                    if (recieveStr.length() > 7) {
                        break;
                    }
                    else {
                        float res = 0;
                        if (recieveStr != null && recieveStr.length() > 0) {
                            res  = Float.parseFloat(recieveStr);
                            //arrayList.add(res);
                            //n ++ ;
                            //Log.e("Tag",String.valueOf(arrayList));
                            //Log.e("Tag",String.valueOf(n));

                        }
                        if (n == 30) {
                            //analyzer.deal(MainActivity.this,arrayList);
                            //重置n和arrlist准备接收下一个5min的数据
                            n = 0;
                            //arrayList.clear();
                        }
                    }
                    //tView.setText(recieveStr);
                    //writeFile(recieveStr);
                    break;
                case MESSAGE_DEVICE_NAME://4
                    // save the connected device's name
                    mConnectedDeviceName = msg.getData().getString(DEVICE_NAME);
                    Toast.makeText(getActivity(), "已成功连接到 " + mConnectedDeviceName, Toast.LENGTH_SHORT).show();
                    //requestSend();//初次连接成功后请求重发
                    break;
                case MESSAGE_TOAST://5
                    Toast.makeText(getActivity(), msg.getData().getString(TOAST),
                            Toast.LENGTH_SHORT).show();
                    break;
            }
        }

    };

    //处理其他Activity的返回结果
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case REQUEST_CONNECT_DEVICE://1
             //当点击了设备列表后返回所指向设备的MAC地址,根据此MAC进行主动连接
             if (resultCode == Activity.RESULT_OK) {
             String address = data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
             BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
             mBlueService.connect(device);
             }
             break;
            case REQUEST_ENABLE_BT://2
                //由确认打开蓝牙Activity返回,若打开成功初始化名片列表
                if (resultCode == Activity.RESULT_OK) {
                    // Bluetooth is now enabled, so set up a chat session
                    setupCards();
                } else {
                    // User did not enable Bluetooth or an error occured
                    Toast.makeText(getActivity(), R.string.bt_not_enabled_leaving, Toast.LENGTH_SHORT).show();
                    //finish();
                }
                break;
            case REQUEST_NEW_CARD://3
                //由添加新名片Activity返回,若添加了新card重新读取并显示
                if (resultCode == Activity.RESULT_OK) {
                    setupCards();
                }
                break;
        }
    }

    private void setupCards() {
        //完成显示内容后,初始化蓝牙服务对象
        mBlueService = new BluetoothService(mHandler);
    }

    //重写setMenuVisibility方法,不然会出现叠层的现象
    public void setMenuVisibility(boolean menuVisibility) {
        super.setMenuVisibility(menuVisibility);
        if (this.getView() != null) {
            this.getView().setVisibility(menuVisibility ? View.VISIBLE : View.GONE);
        }
    }

}

当我把周围的设备搜索出来,准备连接的时候,就给我报错如下:Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.bluetooth.BluetoothDevice android.bluetooth.BluetoothAdapter.getRemoteDevice(java.lang.String)' on a null object reference

出错的这段代码为:BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

我通过日志打印发现明明address是有值的啊,可是怎么就出这种错误呢,求各位大神指导一下啊!
c币不多,能回答上的我追加财富。

  • 写回答

2条回答

  • FFZ2009 2016-08-17 09:56
    关注

    mBluetoothAdapter 是null,没有初始化。
    NullPointerException是mBluetoothAdapter为null引起的。

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?