【问题标题】:How do I update a Google Map's Marker's position using data streamed from a socket?如何使用从套接字流式传输的数据更新 Google 地图标记位置?
【发布时间】:2016-03-26 23:05:57
【问题描述】:

我的应用应该使用通过 Internet 传输的数据在地图上跟踪飞机。我使用 Service 接收数据,然后使用 Messenger 在它和我的 MainActivity (thanks to this guide) 之间发送消息,它有我的带有 SupportMapFragment (MainMapFragment) 和 RecyclerView Fragment (AircraftListFragment) 的片段。

每个Marker在一个HashMap中,MainMapFragment中有一个Aircraft对象,Aircraft对象由MainActivity维护。我的 Activity 是否有类似 notifyDatasetChanged() 的东西来更新我的 MapFragment?显然我不能像这样在 MainMapFragment 中编写方法:

public void updateAircraftArrayList(ArrayList<Aircraft> updatedAircrafts){
    this.aircraftArrayList = updatedAircrafts;
    updateMarkers(); //Update the Markers on the map
}

在我的 MainActivity 中这样访问:

class IncomingHandler extends android.os.Handler {
    @Override
    public void handleMessage(Message msg){
        String aircraftMsg = msg.getData().getString("fromSocket");
        Aircraft newAircraft = decodeSbsMessage(aircraftMsg);
        aircraftArrayList = searchThroughArrayListForAircraft(newAircraft);
        MainMapFragment.updateAircraftArrayList(aircraftArrayList);
    }
}

我听说过 EventBus,但据我所知,它对于处理来自 Socket 的恒定流不是很好。

【问题讨论】:

    标签: android google-maps android-activity android-service google-maps-markers


    【解决方案1】:

    您可以从 MainActivity 调用 updateAircraftArrayList 方法:

    your_instance_of_MainMapFragment.updateAircraftArrayList(aircraftArrayList)
    

    【讨论】:

    • 我现在在嘲笑自己错过了这个,这个问题在过去的几天里一直在绞尽脑汁。感谢您的帮助!
    • 如果它解决了您的问题,您可以接受它作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多