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

我过去一周一直在研究这个逻辑,但没有运气。任何人都可以帮助我吗?所以我遇到的问题是我正在使用信标概念(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中的重复值


也许我可能会对我在代码中使用的上述内容感到困惑。


如果需要在代码中添加任何内容,请在下面发表评论。任何建议和答案将受到高度赞赏。提前致谢。


森栏
浏览 588回答 1
1回答

茅侃侃

你为什么不在每次扫描设备时检查它是否存在然后发送它?public&nbsp;void&nbsp;onScanDevice(DeviceInfo&nbsp;device)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;BeaconXInfo&nbsp;beaconXInfo&nbsp;=&nbsp;beaconXInfoParseable.parseDeviceInfo(device); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(beaconXInfo&nbsp;==&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!beaconXInfoHashMap.containsKey(beaconXInfo.mac))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;new,&nbsp;send&nbsp;it &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;beaconXInfoHashMap.put(beaconXInfo.mac,&nbsp;beaconXInfo); &nbsp;&nbsp;&nbsp;&nbsp;updateDevices();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java