Я хотел бы вызвать метод private void addMarkers()
через метод public void message()
. Если кто-нибудь может мне помочь, я был бы благодарен. Мне нужно это сделать, потому что метод message()
получает широты, поэтому я бы хотел, чтобы каждый раз, когда он получает сообщение (с широтой и долготой), он вызывает addMarker()
, чтобы его можно было воссоздать, однако, с новыми значениями долготы и широты, которые были получены в методе сообщения. Если кто-то может помочь мне найти другой способ добавить Maker, а также его обновление, с этого момента я буду признателен.
My Code:
public void pubnubActions() {
pubnub.addListener(new SubscribeCallback() {
@Override
public void status(PubNub pubnub, PNStatus status) {
switch (status.getOperation()) {
// let's combine unsubscribe and subscribe handling for ease of use
case PNSubscribeOperation:
case PNUnsubscribeOperation:
// note: subscribe statuses never have traditional
// errors, they just have categories to represent the
// different issues or successes that occur as part of subscribe
switch (status.getCategory()) {
case PNConnectedCategory:
// this is expected for a subscribe, this means there is no error or issue whatsoever
case PNReconnectedCategory:
// this usually occurs if subscribe temporarily fails but reconnects. This means
// there was an error but there is no longer any issue
case PNDisconnectedCategory:
// this is the expected category for an unsubscribe. This means there
// was no error in unsubscribing from everything
case PNUnexpectedDisconnectCategory:
// this is usually an issue with the internet connection, this is an error, handle appropriately
case PNAccessDeniedCategory:
// this means that PAM does allow this client to subscribe to this
// channel and channel group configuration. This is another explicit error
default:
// More errors can be directly specified by creating explicit cases for other
// error categories of `PNStatusCategory` such as `PNTimeoutCategory` or `PNMalformedFilterExpressionCategory` or `PNDecryptionErrorCategory`
}
case PNHeartbeatOperation:
// heartbeat operations can in fact have errors, so it is important to check first for an error.
// For more information on how to configure heartbeat notifications through the status
// PNObjectEventListener callback, consult <link to the PNCONFIGURATION heartbeart config>
if (status.isError()) {
// There was an error with the heartbeat operation, handle here
} else {
// heartbeat operation was successful
}
default: {
// Encountered unknown status type
}
}
}
@Override
public void message(PubNub pubnub, PNMessageResult message) {
String messagePublisher = message.getPublisher();
System.out.println("Message publisher: " + messagePublisher);
System.out.println("Message Payload: " + message.getMessage());
System.out.println("Message Subscription: " + message.getSubscription());
System.out.println("Message Channel: " + message.getChannel());
System.out.println("Message timetoken: " + message.getTimetoken());
JsonObject mensagem = (JsonObject)message.getMessage();
String latitude = mensagem.get("lat").getAsString();
String longitude = mensagem.get("lng").getAsString();
String altitude = mensagem.get("alt").getAsString();
Lat = Double.parseDouble(latitude);
Lng = Double.parseDouble(longitude);
alt = Double.parseDouble(altitude);
System.out.println("A latitude recebida é igual: "+ latitude);
System.out.println("A longitude recebida é igual: "+ longitude);
System.out.println("A altura recebida é igual: "+ altitude);
}
@Override
public void presence(PubNub pubnub, PNPresenceEventResult presence) {
}
});
pubnub.subscribe()
.channels(Arrays.asList("")) // subscribe to channels
.execute();
}
public void onMapReady(@NonNull final MapboxMap mapboxMap) {
Mapa.this.mapboxMap = mapboxMap;
mapboxMap.setStyle(new Style.Builder().fromUri(""),
new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
enableLocationComponent(style);
style.addImage(MARKER_IMAGE, BitmapFactory.decodeResource(
Mapa.this.getResources(), R.drawable.automobile));
addMarkers(style);
}
private void addMarkers(@NonNull Style loadedMapStyle) {
List<Feature> features = new ArrayList<>();
features.add(Feature.fromGeometry(Point.fromLngLat(Lat, Lng)));
/* Source: A data source specifies the geographic coordinate where the image marker gets placed. */
loadedMapStyle.addSource(new GeoJsonSource(MARKER_SOURCE, FeatureCollection.fromFeatures(features)));
/* Style layer: A style layer ties together the source and image and specifies how they are displayed on the map. */
loadedMapStyle.addLayer(new SymbolLayer(MARKER_STYLE_LAYER, MARKER_SOURCE)
.withProperties(
PropertyFactory.iconAllowOverlap(true),
PropertyFactory.iconIgnorePlacement(true),
PropertyFactory.iconImage(MARKER_IMAGE),
// Adjust the second number of the Float array based on the height of your marker image.
// This is because the bottom of the marker should be anchored to the coordinate point, rather
// than the middle of the marker being the anchor point on the map.
PropertyFactory.iconOffset(new Float[]{-10f, -0f})
));
}
});
}