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币不多,能回答上的我追加财富。
mBluetoothAdapter 是null,没有初始化。
NullPointerException是mBluetoothAdapter为null引起的。
mBluetoothAdapter是空指针,你要初始化。添加如下代码private BluetoothManager mBluetoothManager=null;
if (mBluetoothManager == null) {
mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
if (mBluetoothManager == null) {
Log.e(TAG, "Unable to initialize BluetoothManager.");
return false; }
}
mBluetoothAdapter = mBluetoothManager.getAdapter();
最后一句代码才是初始化。