// A click handler for the save map button private void SaveButtonClicked(object sender, EventArgs e) { try { // Get information for the new portal item var title = MapTitleEntry.Text; var description = MapDescriptionEntry.Text; var tags = MapTagsEntry.Text.Split(','); // Make sure all required info was entered if (string.IsNullOrEmpty(title) || string.IsNullOrEmpty(description) || tags.Length == 0) { throw new Exception("Please enter a title, description, and some tags to describe the map."); } // Create a new OnSaveMapEventArgs object to store the information entered by the user var mapSavedArgs = new SaveMapEventArgs(title, description, tags); // Raise the OnSaveClicked event so the main activity can handle the event and save the map OnSaveClicked(this, mapSavedArgs); // Close the dialog Navigation.PopAsync(); } catch (Exception ex) { // Show the exception message (dialog will stay open so user can try again) DisplayAlert("Error", ex.Message, "OK"); } }
// Event handler to get information entered by the user and save the map private async void SaveMapAsync(object sender, SaveMapEventArgs e) { // Get the current map var myMap = MyMapView.Map; try { // Show the progress bar so the user knows work is happening SaveMapProgressBar.IsVisible = true; // Make sure the user is logged in to ArcGIS Online var cred = await EnsureLoggedInAsync(); AuthenticationManager.Current.AddCredential(cred); // Get information entered by the user for the new portal item properties var title = e.MapTitle; var description = e.MapDescription; var tags = e.Tags; // Apply the current extent as the map's initial extent myMap.InitialViewpoint = MyMapView.GetCurrentViewpoint(ViewpointType.BoundingGeometry); // See if the map has already been saved (has an associated portal item) if (myMap.Item == null) { // Get the ArcGIS Online portal (will use credential from login above) ArcGISPortal agsOnline = await ArcGISPortal.CreateAsync(new Uri(ArcGISOnlineUrl)); // Save the current state of the map as a portal item in the user's default folder RuntimeImage img = null; await myMap.SaveAsAsync(agsOnline, null, title, description, tags, img, false); // Report a successful save DisplayAlert("Map Saved", "Saved '" + title + "' to ArcGIS Online!", "OK"); } else { // This is not the initial save, call SaveAsync to save changes to the existing portal item await myMap.SaveAsync(); // Report update was successful DisplayAlert("Updates Saved", "Saved changes to '" + myMap.Item.Title + "'", "OK"); } } catch (Exception ex) { // Show the exception message DisplayAlert("Unable to save map", ex.Message, "OK"); } finally { // Hide the progress bar SaveMapProgressBar.IsVisible = false; } }