我过去一周一直在研究这个逻辑,但没有运气。任何人都可以帮助我吗?所以我遇到的问题是我正在使用信标概念(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();
}
问题出在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进行比较,其中数据发生了变化,称为“55:46:4F:D2:72:5A”。我需要发送这些数据而忽略“F5:5E:B1:65:94:4B”。
与此相同,如何仅将此“C8:DE:FE:45:50:02”值与之前的hashmap相比较发送到服务器。
那么如何将hashmap数据的第一个日志与下一系列hashmap数据进行比较,我只能获取最新值并将其发送到服务器。
我在发布之前已经研究过一堆问题,如下所示:
如何从Android中的arraylist中删除重复值
如何从ArrayList中删除重复的元素?
从Java中删除HashMap中的重复值
也许我可能会对我在代码中使用的上述内容感到困惑。
如果需要在代码中添加任何内容,请在下面发表评论。任何建议和答案将受到高度赞赏。提前致谢。
茅侃侃
相关分类