如何使用从套接字流式传输的数据更新 Google 地图标记的位置?
How do I update a Google Map's Marker's position using data streamed from a socket?
我的应用程序应该使用通过 Internet 传输的数据在地图上跟踪飞机。我使用 Service 接收数据,然后使用 Messengers 在它和我的 MainActivity (thanks to this guide) 之间发送消息,它有我的 Fragment 和 SupportMapFragment (MainMapFragment) 以及 RecyclerView Fragment (AircraftListFragment).
每个Marker在一个HashMap中,在MainMapFragment中有一个Aircraft对象,Aircraft对象由Main维护Activity。我的 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 的常量流。
您可以从 MainActivity 调用 updateAircraftArrayList 方法:
your_instance_of_MainMapFragment.updateAircraftArrayList(aircraftArrayList)
我的应用程序应该使用通过 Internet 传输的数据在地图上跟踪飞机。我使用 Service 接收数据,然后使用 Messengers 在它和我的 MainActivity (thanks to this guide) 之间发送消息,它有我的 Fragment 和 SupportMapFragment (MainMapFragment) 以及 RecyclerView Fragment (AircraftListFragment).
每个Marker在一个HashMap中,在MainMapFragment中有一个Aircraft对象,Aircraft对象由Main维护Activity。我的 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 的常量流。
您可以从 MainActivity 调用 updateAircraftArrayList 方法:
your_instance_of_MainMapFragment.updateAircraftArrayList(aircraftArrayList)