【发布时间】:2018-05-25 05:23:01
【问题描述】:
我正在制作一个程序,它会寻找与手机蓝牙设备配对的设备,显示它们和它们的地址以供用户查看,并且当用户已经在他的手机中打开 Bt 时它工作正常。当他不这样做时会出现问题,导致添加到 arrayList 中的数据重复。我使用了一个while循环,所以它只在打开Bt模块后检查配对设备,这是在onResume()上做这样的好方法吗?
【问题讨论】:
标签: java android arraylist bluetooth
我正在制作一个程序,它会寻找与手机蓝牙设备配对的设备,显示它们和它们的地址以供用户查看,并且当用户已经在他的手机中打开 Bt 时它工作正常。当他不这样做时会出现问题,导致添加到 arrayList 中的数据重复。我使用了一个while循环,所以它只在打开Bt模块后检查配对设备,这是在onResume()上做这样的好方法吗?
【问题讨论】:
标签: java android arraylist bluetooth
快速解决方法是检查String 是否已存在于您的数据源列表中。像这样的
for (BluetoothDevice device: pairedDevice) {
String name = device.getName();
String address = device.getAddress();
String toBeAdded = address + " " + name;
if (!QueryDevices_final.contains(toBeAdded) {
QueryDevices_final.add(toBeAdded);
arrayAdapter.notifyDataSetChanged();
}
}
【讨论】:
你不能把你的 checkBluetoothState() 放在 onCreate 方法中吗?并根据结果调用数组创建的东西?
根据您应用的开发方式,可以多次调用 onResume。为避免这种情况,您可以:
创建一个共享首选项/标志并仅调用一次(firstRun=true 并在运行一次时将其更新为 false),然后根据该标志创建和更新数组,
李>在该类中创建一个公共变量,并仅在第一次运行该代码时。最后改变量。
更改活动的实施方式,以便 onResume 只运行一次。
您还可以查看此答案并尝试了解您的应用在哪里调用了两次 onResume: Why is my onResume being called twice?
【讨论】: