【发布时间】:2019-09-30 03:51:23
【问题描述】:
上周我一直在研究这个逻辑,但没有运气。任何人都可以帮助我吗?所以我被卡住的问题是我正在使用信标概念(Moko Beacon)使用bindService,它扫描信标直到应用程序被破坏。所以我一直得到信标数据。
这是我的代码:
public class MainActivity extends AppCompatActivity implements
MokoScanDeviceCallback {
private MokoService mMokoService;
private HashMap<String, BeaconXInfo> beaconXInfoHashMap;
public ArrayList<BeaconXInfo> beaconXInfos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindService(intent, mServiceConnection, BIND_AUTO_CREATE);
beaconXInfoHashMap = new HashMap<>();
beaconXInfos = new ArrayList<>();
}
public void onScanDevice(DeviceInfo device) {
final BeaconXInfo beaconXInfo = beaconXInfoParseable.parseDeviceInfo(device);
if (beaconXInfo == null) {
return;
}
beaconXInfoHashMap.put(beaconXInfo.mac, beaconXInfo);
updateDevices();
}
private void updateDevices() {
Collections.sort(beaconXInfos, new Comparator<BeaconXInfo>() {
@Override
public int compare(BeaconXInfo lhs, BeaconXInfo rhs) {
Log.e("beaconXinfo", String.valueOf(beaconXInfos.toString()));
if (lhs.rssi < rhs.rssi){
for (int i = 0 ; i < beaconXInfos.size();i++){
if ((beaconXInfos.get(i).rssi > -40)){
NotificationHelper notificationHelper = new NotificationHelper(MainActivity.this);
notificationHelper.CreateNotification(beaconXInfos.get(i).mac,"enter");
}else if ((beaconXInfos.get(i).rssi < -40)){
NotificationHelper notificationHelper = new NotificationHelper(MainActivity.this);
notificationHelper.CreateNotification(beaconXInfos.get(i).mac,"exit");
}
}
}
return 0;
}
});
}
问题在于 updateDevices() 方法,在该方法中我不断获取值,直到我销毁应用程序。日志值如下:
E/beaconXinfo: [BeaconXInfo{name='BeaconX', mac='F5:5E:B1:65:94:4B'}]
E/beaconXinfo: [BeaconXInfo{name='BeaconX', mac='F5:5E:B1:65:94:4B'}, BeaconXInfo{name='UFO', mac='55:46:4F:D2:72:5A'}]
E/beaconXinfo: [BeaconXInfo{name='BeaconX', mac='F5:5E:B1:65:94:4B'}, BeaconXInfo{name='UFO', mac='55:46:4F:D2:72:5A'}, BeaconXInfo{name='null', mac='C8:DE:FE:45:50:02'}] //change in the data
正如你在上面看到的,最后一个日志中的数据发生了变化,我只想在 hashmap 中的数据发生变化时才将数据发送到服务器。
首先我发送数据“F5:5E:B1:65:94:4B”,因为只有一个值。接下来,我需要将此 hashmap 与下一个 hashmap 进行比较,下一个 hashmap 的数据发生了变化,称为“55:46:4F:D2:72:5A”。我需要忽略“F5:5E:B1:65:94:4B”发送此数据。
同样,如何仅将这个“C8:DE:FE:45:50:02”值与之前的 hashmap 比较发送到服务器。
那么如何将第一个哈希图数据日志与下一系列哈希图数据进行比较,我只能获取最新值并将其发送到服务器。
在发布之前,我已经研究了一堆问题,如下所示:
How to remove Duplicate value from arraylist in Android
How do I remove repeated elements from ArrayList?
Remove duplicate values from HashMap in Java
也许我可能对我在代码中使用的上述内容感到困惑。
如果需要在代码中添加任何内容,请在下方评论。任何建议和答案将不胜感激。提前致谢。
【问题讨论】:
-
beaconXInfos似乎没有在onScanDevice方法中更新。
标签: java android hashmap beacon