为了账号安全,请及时绑定邮箱和手机立即绑定

仅当Android中的HashMap数据发生更改时才将数据发送到服务器

仅当Android中的HashMap数据发生更改时才将数据发送到服务器

森栏 2019-04-24 15:11:16
我过去一周一直在研究这个逻辑,但没有运气。任何人都可以帮助我吗?所以我遇到的问题是我正在使用信标概念(Moko Beacon)使用bindService来扫描信标,直到应用程序被销毁。所以我一直得到信标数据。这是我的代码:public class MainActivity extends AppCompatActivity implements               MokoScanDeviceCallback {private MokoService mMokoService;private HashMap<String, BeaconXInfo> beaconXInfoHashMap;public ArrayList<BeaconXInfo> beaconXInfos;@Overrideprotected 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中的重复值也许我可能会对我在代码中使用的上述内容感到困惑。如果需要在代码中添加任何内容,请在下面发表评论。任何建议和答案将受到高度赞赏。提前致谢。
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

你为什么不在每次扫描设备时检查它是否存在然后发送它?

public void onScanDevice(DeviceInfo device) {
    final BeaconXInfo beaconXInfo = beaconXInfoParseable.parseDeviceInfo(device);
    if (beaconXInfo == null) {
        return;
    }
    if (!beaconXInfoHashMap.containsKey(beaconXInfo.mac)) {
        // new, send it
    }
    beaconXInfoHashMap.put(beaconXInfo.mac, beaconXInfo);
    updateDevices();}


查看完整回答
反对 回复 2019-05-15
  • 1 回答
  • 0 关注
  • 587 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信