使用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
中。
答案 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()
方法声明。