I would like to invoke the private void addMarkers() method through the public void message() method. if anyone can help me, i would be grateful.I need to do this, because the message() method receives the latitudes, so I would like that every time it receives a message (with the latitude and longitude) it calls the addMarker() method so that it could be recreated however with the new Longitude Latitudes that were received in the message method. If someone can help me find another way to add a Maker and also its update, I will be accepting, from now on, grateful.
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})
));
}
});
}