Android蓝牙崩溃应用程序

时间:2016-09-26 01:45:06

标签: android android-arrayadapter android-bluetooth

使用device.getName()时遇到问题。由于某种原因导致我的应用程序崩溃。

我正在做的是在对话框中显示适配器(保持蓝牙名称)。当我运行应用程序并添加device.getAdress()而不是 - .getName()时,应用程序运行正常,但在使用.getName()时,它会崩溃。

mBluetoothAdapter.startDiscovery();
receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

            toothadapter.add(device.getName());
            toothadapter.notifyDataSetChanged();
        }
    }
};
AlertDialog.Builder builder = new AlertDialog.Builder(bluetooth.this);
builder.setTitle("Nearby Devices:");
builder.setAdapter(toothadapter, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {

    }
});
AlertDialog alert = builder.create();
alert.show();

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(receiver, filter);

真的需要一些帮助来解释为什么会发生这种情况。 上面的代码全部包含在onCreate()内的buttonListener中。

1 个答案:

答案 0 :(得分:1)

  

真的需要一些帮助来解释为什么会这样。

在没有看到堆栈跟踪的情况下,几乎不可能确定导致应用程序崩溃的原因。

但请注意BluetoothDevice.getName()如果"则出现问题" ,则会返回null。我们知道(根据您获得的Toast通知)该方法会在应用中返回null个。这些null可能是也可能不是崩溃的原因。

此外,null设备名称不能导致NPE的地方为ArrayAdapter。当您致电new ArrayAdapter<String>(Context, int)时,系统会调用以下constructor

public ArrayAdapter(Context context, int resource) {
    init(context, resource, 0, new ArrayList<T>());
}

用于存储数据的数据结构为ArrayList,其add()方法实施允许添加null而不是List<>&#39} add()方法声明。