<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: No data error GeoDatabase in Java Maps SDK Questions</title>
    <link>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1504019#M2861</link>
    <description>&lt;P&gt;I tried to minimize to this but still no luck&amp;nbsp;&lt;/P&gt;&lt;P&gt;package com.neoplexus.database;&lt;/P&gt;&lt;P&gt;import com.esri.arcgisruntime.concurrent.ListenableFuture;&lt;BR /&gt;import com.esri.arcgisruntime.data.*;&lt;BR /&gt;import com.esri.arcgisruntime.geometry.GeometryType;&lt;BR /&gt;import com.esri.arcgisruntime.geometry.Point;&lt;BR /&gt;import com.esri.arcgisruntime.geometry.SpatialReference;&lt;BR /&gt;import com.esri.arcgisruntime.layers.FeatureLayer;&lt;BR /&gt;import com.esri.arcgisruntime.loadable.LoadStatus;&lt;/P&gt;&lt;P&gt;import java.io.File;&lt;BR /&gt;import java.io.IOException;&lt;BR /&gt;import java.util.HashMap;&lt;BR /&gt;import java.util.List;&lt;BR /&gt;import java.util.concurrent.*;&lt;/P&gt;&lt;P&gt;import static com.neoplexus.iris.Constants.GEO_DATABASE_FOLDER;&lt;/P&gt;&lt;P&gt;public class GeoDataBase {&lt;/P&gt;&lt;P&gt;private Geodatabase db;&lt;BR /&gt;private GeodatabaseFeatureTable trackFeatureTable;&lt;BR /&gt;private FeatureLayer trackFeatureLayer;&lt;BR /&gt;private ExecutorService executorService = Executors.newFixedThreadPool(4);&lt;/P&gt;&lt;P&gt;public void initializeGeodatabase() {&lt;BR /&gt;System.out.println("Geodatabase path: " + GEO_DATABASE_FOLDER);&lt;/P&gt;&lt;P&gt;executorService.submit(() -&amp;gt; {&lt;BR /&gt;// Ensure the directory structure exists&lt;BR /&gt;File geodatabaseFile = new File(GEO_DATABASE_FOLDER);&lt;BR /&gt;File parentDir = geodatabaseFile.getParentFile();&lt;/P&gt;&lt;P&gt;if (!parentDir.exists() &amp;amp;&amp;amp; !parentDir.mkdirs()) {&lt;BR /&gt;System.err.println("Failed to create directories: " + parentDir.getAbsolutePath());&lt;BR /&gt;return;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;// Check if the geodatabase file exists&lt;BR /&gt;if (!geodatabaseFile.exists()) {&lt;BR /&gt;try {&lt;BR /&gt;if (geodatabaseFile.createNewFile()) {&lt;BR /&gt;System.out.println("Geodatabase file created: " + geodatabaseFile.getAbsolutePath());&lt;BR /&gt;createGeodatabase(geodatabaseFile.getAbsolutePath());&lt;BR /&gt;} else {&lt;BR /&gt;System.err.println("Failed to create geodatabase file.");&lt;BR /&gt;return;&lt;BR /&gt;}&lt;BR /&gt;} catch (IOException e) {&lt;BR /&gt;System.err.println("IOException: " + e.getMessage());&lt;BR /&gt;return;&lt;BR /&gt;}&lt;BR /&gt;} else {&lt;BR /&gt;System.out.println("Geodatabase file already exists: " + geodatabaseFile.getAbsolutePath());&lt;BR /&gt;loadGeodatabase(geodatabaseFile.getAbsolutePath());&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void createGeodatabase(String geodatabasePath) {&lt;BR /&gt;db = new Geodatabase(geodatabasePath);&lt;BR /&gt;db.loadAsync();&lt;BR /&gt;db.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (db.getLoadStatus() == LoadStatus.LOADED) {&lt;BR /&gt;createAndLoadFeatureTables();&lt;BR /&gt;} else {&lt;BR /&gt;handleLoadError();&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void loadGeodatabase(String geodatabasePath) {&lt;BR /&gt;db = new Geodatabase(geodatabasePath);&lt;BR /&gt;db.loadAsync();&lt;BR /&gt;db.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (db.getLoadStatus() == LoadStatus.LOADED) {&lt;BR /&gt;trackFeatureTable = findFeatureTableByName("TRACK_TABLE");&lt;/P&gt;&lt;P&gt;db.getGeodatabaseFeatureTables().forEach(table -&amp;gt; {&lt;BR /&gt;table.loadAsync();&lt;BR /&gt;table.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (table.getLoadStatus() != LoadStatus.LOADED) {&lt;BR /&gt;System.err.println("Failed to load feature table: " + table.getTableName());&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;});&lt;BR /&gt;initializeFeatureLayers();&lt;BR /&gt;} else {&lt;BR /&gt;handleLoadError();&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private GeodatabaseFeatureTable findFeatureTableByName(String tableName) {&lt;BR /&gt;return db.getGeodatabaseFeatureTables().stream()&lt;BR /&gt;.filter(table -&amp;gt; table.getTableName().equals(tableName))&lt;BR /&gt;.findFirst().orElse(null);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void initializeFeatureLayers() {&lt;BR /&gt;if (trackFeatureTable != null) {&lt;BR /&gt;trackFeatureLayer = createFeatureLayer(trackFeatureTable);&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void createAndLoadFeatureTables() {&lt;BR /&gt;CompletableFuture&amp;lt;GeodatabaseFeatureTable&amp;gt; futureTrackTable = createGeodatabaseFeatureTable("TRACK_TABLE");&lt;BR /&gt;futureTrackTable.thenAccept(table -&amp;gt; {&lt;BR /&gt;if (table != null) {&lt;BR /&gt;trackFeatureTable = table;&lt;BR /&gt;trackFeatureLayer = createFeatureLayer(trackFeatureTable);&lt;BR /&gt;}&lt;BR /&gt;});&lt;/P&gt;&lt;P&gt;db.getGeodatabaseFeatureTables().forEach(table -&amp;gt; {&lt;BR /&gt;table.loadAsync();&lt;BR /&gt;table.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (table.getLoadStatus() != LoadStatus.LOADED) {&lt;BR /&gt;System.err.println("Failed to load feature table: " + table.getTableName());&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;});&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private FeatureLayer createFeatureLayer(GeodatabaseFeatureTable table) {&lt;BR /&gt;FeatureLayer featureLayer = new FeatureLayer(table);&lt;BR /&gt;featureLayer.loadAsync();&lt;BR /&gt;featureLayer.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (featureLayer.getLoadStatus() == LoadStatus.LOADED) {&lt;BR /&gt;System.out.println("Feature layer loaded: " + table.getTableName());&lt;BR /&gt;} else {&lt;BR /&gt;System.err.println("Failed to load feature layer: " + table.getTableName());&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;return featureLayer;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private CompletableFuture&amp;lt;GeodatabaseFeatureTable&amp;gt; createGeodatabaseFeatureTable(String name) {&lt;BR /&gt;return CompletableFuture.supplyAsync(() -&amp;gt; {&lt;BR /&gt;TableDescription tableDescription = createTableDescription(name);&lt;/P&gt;&lt;P&gt;ListenableFuture&amp;lt;GeodatabaseFeatureTable&amp;gt; futureTable = db.createTableAsync(tableDescription);&lt;BR /&gt;try {&lt;BR /&gt;GeodatabaseFeatureTable table = futureTable.get();&lt;BR /&gt;System.out.println("Created Feature Table: " + table.getTableName());&lt;BR /&gt;return table;&lt;BR /&gt;} catch (InterruptedException | ExecutionException e) {&lt;BR /&gt;e.printStackTrace();&lt;BR /&gt;return null;&lt;BR /&gt;}&lt;BR /&gt;}, executorService);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private TableDescription createTableDescription(String name) {&lt;BR /&gt;TableDescription tableDescription = new TableDescription(name);&lt;/P&gt;&lt;P&gt;List&amp;lt;FieldDescription&amp;gt; fieldDescriptions = List.of(&lt;BR /&gt;new FieldDescription("MMSI", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("controlPoints", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("wkid", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("uniquedesignation", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("sidc", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("indicator", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("MyNotes", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("x", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("z", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("z2", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("y", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("distance", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("direction", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("speed", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("datetimevalid", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("createdby", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("datetimeexpired", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("datecreated", Field.Type.TEXT)&lt;BR /&gt;);&lt;/P&gt;&lt;P&gt;tableDescription.getFieldDescriptions().addAll(fieldDescriptions);&lt;BR /&gt;tableDescription.setHasAttachments(false);&lt;/P&gt;&lt;P&gt;return tableDescription;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void handleLoadError() {&lt;BR /&gt;System.err.println("Failed to load geodatabase.");&lt;BR /&gt;Throwable loadError = db.getLoadError();&lt;BR /&gt;if (loadError != null) {&lt;BR /&gt;System.err.println("Load error: " + loadError.getMessage());&lt;BR /&gt;loadError.printStackTrace();&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;public void addFeatureToTrackTable(Point point, HashMap&amp;lt;String, Object&amp;gt; attributes) {&lt;BR /&gt;if (trackFeatureTable.getLoadStatus() != LoadStatus.LOADED) {&lt;BR /&gt;System.err.println("Feature table is not loaded.");&lt;BR /&gt;return;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Feature feature = trackFeatureTable.createFeature(attributes, point);&lt;BR /&gt;ListenableFuture&amp;lt;Void&amp;gt; addFeatureFuture = trackFeatureTable.addFeatureAsync(feature);&lt;BR /&gt;addFeatureFuture.addDoneListener(() -&amp;gt; {&lt;BR /&gt;try {&lt;BR /&gt;addFeatureFuture.get();&lt;BR /&gt;System.out.println("Feature added to TRACK_TABLE: " + feature.getAttributes());&lt;BR /&gt;} catch (InterruptedException | ExecutionException e) {&lt;BR /&gt;e.printStackTrace();&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 11 Jul 2024 09:04:53 GMT</pubDate>
    <dc:creator>rod182211</dc:creator>
    <dc:date>2024-07-11T09:04:53Z</dc:date>
    <item>
      <title>No data error GeoDatabase</title>
      <link>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1504010#M2860</link>
      <description>&lt;P&gt;For the life of e I can't figure this out any ideas. Here is my code. Obviously something silly. Java 17 200.4&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;PRE&gt;String &lt;SPAN&gt;GEO_DATABASE_FOLDER &lt;/SPAN&gt;= System.&lt;SPAN&gt;getProperty&lt;/SPAN&gt;(&lt;SPAN&gt;"user.home"&lt;/SPAN&gt;) +&lt;BR /&gt;        System.&lt;SPAN&gt;getProperty&lt;/SPAN&gt;(&lt;SPAN&gt;"file.separator"&lt;/SPAN&gt;) + &lt;SPAN&gt;"." &lt;/SPAN&gt;+ &lt;SPAN&gt;APP_NAME&lt;/SPAN&gt;.toLowerCase() +&lt;BR /&gt;        System.&lt;SPAN&gt;getProperty&lt;/SPAN&gt;(&lt;SPAN&gt;"file.separator"&lt;/SPAN&gt;) + &lt;SPAN&gt;DATA_BASEDIRECTORY &lt;/SPAN&gt;+&lt;BR /&gt;        System.&lt;SPAN&gt;getProperty&lt;/SPAN&gt;(&lt;SPAN&gt;"file.separator"&lt;/SPAN&gt;) + &lt;SPAN&gt;"geodatabase.geodatabase"&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;PRE&gt;&lt;SPAN&gt;package &lt;/SPAN&gt;com.neoplexus.database&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.concurrent.ListenableFuture&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.data.*&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.geometry.GeometryType&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.geometry.Point&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.geometry.SpatialReference&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.layers.FeatureLayer&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;com.esri.arcgisruntime.loadable.LoadStatus&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;java.io.File&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;java.io.IOException&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;java.util.HashMap&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;java.util.List&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import &lt;/SPAN&gt;java.util.concurrent.*&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;import static &lt;/SPAN&gt;com.neoplexus.iris.Constants.&lt;SPAN&gt;GEO_DATABASE_FOLDER&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;public class &lt;/SPAN&gt;GeoDataBase {&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;private &lt;/SPAN&gt;Geodatabase &lt;SPAN&gt;db&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;GeodatabaseFeatureTable &lt;SPAN&gt;trackFeatureTable&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;GeodatabaseFeatureTable &lt;SPAN&gt;lineFeatureTable&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;GeodatabaseFeatureTable &lt;SPAN&gt;areaFeatureTable&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;GeodatabaseFeatureTable &lt;SPAN&gt;multipointFeatureTable&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;FeatureLayer &lt;SPAN&gt;trackFeatureLayer&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;FeatureLayer &lt;SPAN&gt;lineFeatureLayer&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;FeatureLayer &lt;SPAN&gt;areaFeatureLayer&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;FeatureLayer &lt;SPAN&gt;multipointFeatureLayer&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private &lt;/SPAN&gt;ExecutorService &lt;SPAN&gt;executorService &lt;/SPAN&gt;= Executors.&lt;SPAN&gt;newFixedThreadPool&lt;/SPAN&gt;(&lt;SPAN&gt;4&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    private boolean &lt;/SPAN&gt;&lt;SPAN&gt;hasAlt&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;    public void &lt;/SPAN&gt;&lt;SPAN&gt;initializeGeodatabase&lt;/SPAN&gt;() {&lt;BR /&gt;        System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Geodatabase path: " &lt;/SPAN&gt;+ &lt;SPAN&gt;GEO_DATABASE_FOLDER&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;executorService&lt;/SPAN&gt;.submit(() -&amp;gt; {&lt;BR /&gt;            &lt;SPAN&gt;// Ensure the directory structure exists&lt;BR /&gt;&lt;/SPAN&gt;            File geodatabaseFile = &lt;SPAN&gt;new &lt;/SPAN&gt;File(&lt;SPAN&gt;GEO_DATABASE_FOLDER&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            File parentDir = geodatabaseFile.getParentFile()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            if &lt;/SPAN&gt;(!parentDir.exists() &amp;amp;&amp;amp; !parentDir.mkdirs()) {&lt;BR /&gt;                System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to create directories: " &lt;/SPAN&gt;+ parentDir.getAbsolutePath())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                return;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;// Check if the geodatabase file exists&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;(!geodatabaseFile.exists()) {&lt;BR /&gt;                &lt;SPAN&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;                    &lt;SPAN&gt;if &lt;/SPAN&gt;(geodatabaseFile.createNewFile()) {&lt;BR /&gt;                        System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Geodatabase file created: " &lt;/SPAN&gt;+ geodatabaseFile.getAbsolutePath())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                        System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to create geodatabase file."&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                        return;&lt;BR /&gt;&lt;/SPAN&gt;                    }&lt;BR /&gt;                } &lt;SPAN&gt;catch &lt;/SPAN&gt;(IOException e) {&lt;BR /&gt;                    System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"IOException: " &lt;/SPAN&gt;+ e.getMessage())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                    return;&lt;BR /&gt;&lt;/SPAN&gt;                }&lt;BR /&gt;            } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Geodatabase file already exists: " &lt;/SPAN&gt;+ geodatabaseFile.getAbsolutePath())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;&lt;BR /&gt;            &lt;SPAN&gt;// Initialize and load the geodatabase&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;db &lt;/SPAN&gt;= &lt;SPAN&gt;new &lt;/SPAN&gt;Geodatabase(geodatabaseFile.getAbsolutePath())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;db&lt;/SPAN&gt;.loadAsync()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            &lt;SPAN&gt;db&lt;/SPAN&gt;.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;(&lt;SPAN&gt;db&lt;/SPAN&gt;.getLoadStatus() == LoadStatus.&lt;SPAN&gt;LOADED&lt;/SPAN&gt;) {&lt;BR /&gt;                    System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Geodatabase loaded successfully."&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    createAndLoadFeatureTables()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                    System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to load geodatabase."&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    Throwable loadError = &lt;SPAN&gt;db&lt;/SPAN&gt;.getLoadError()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                    if &lt;/SPAN&gt;(loadError != &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;                        System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Load error: " &lt;/SPAN&gt;+ loadError.getMessage())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                        loadError.printStackTrace()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                    }&lt;BR /&gt;                }&lt;BR /&gt;            })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;private void &lt;/SPAN&gt;&lt;SPAN&gt;createAndLoadFeatureTables&lt;/SPAN&gt;() {&lt;BR /&gt;        createGeodatabaseFeatureTable(&lt;SPAN&gt;"TRACK_TABLE"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;GeometryType.&lt;SPAN&gt;POINT&lt;/SPAN&gt;&lt;SPAN&gt;, true&lt;/SPAN&gt;).thenAccept(table -&amp;gt; {&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;(table != &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;                &lt;SPAN&gt;trackFeatureTable &lt;/SPAN&gt;= table&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;trackFeatureLayer &lt;/SPAN&gt;= createFeatureLayer(&lt;SPAN&gt;trackFeatureTable&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Created and loaded TRACK_TABLE"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to create TRACK_TABLE"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        createGeodatabaseFeatureTable(&lt;SPAN&gt;"LINE_TABLE"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;GeometryType.&lt;SPAN&gt;POLYLINE&lt;/SPAN&gt;&lt;SPAN&gt;, true&lt;/SPAN&gt;).thenAccept(table -&amp;gt; {&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;(table != &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;                &lt;SPAN&gt;lineFeatureTable &lt;/SPAN&gt;= table&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;lineFeatureLayer &lt;/SPAN&gt;= createFeatureLayer(&lt;SPAN&gt;lineFeatureTable&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Created and loaded LINE_TABLE"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to create LINE_TABLE"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        createGeodatabaseFeatureTable(&lt;SPAN&gt;"AREA_TABLE"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;GeometryType.&lt;SPAN&gt;POLYGON&lt;/SPAN&gt;&lt;SPAN&gt;, true&lt;/SPAN&gt;).thenAccept(table -&amp;gt; {&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;(table != &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;                &lt;SPAN&gt;areaFeatureTable &lt;/SPAN&gt;= table&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;areaFeatureLayer &lt;/SPAN&gt;= createFeatureLayer(&lt;SPAN&gt;areaFeatureTable&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Created and loaded AREA_TABLE"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to create AREA_TABLE"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        createGeodatabaseFeatureTable(&lt;SPAN&gt;"MULTIPOINT_TABLE"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;GeometryType.&lt;SPAN&gt;MULTIPOINT&lt;/SPAN&gt;&lt;SPAN&gt;, true&lt;/SPAN&gt;).thenAccept(table -&amp;gt; {&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;(table != &lt;SPAN&gt;null&lt;/SPAN&gt;) {&lt;BR /&gt;                &lt;SPAN&gt;multipointFeatureTable &lt;/SPAN&gt;= table&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                &lt;SPAN&gt;multipointFeatureLayer &lt;/SPAN&gt;= createFeatureLayer(&lt;SPAN&gt;multipointFeatureTable&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Created and loaded MULTIPOINT_TABLE"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to create MULTIPOINT_TABLE"&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        &lt;SPAN&gt;db&lt;/SPAN&gt;.getGeodatabaseFeatureTables().forEach(table -&amp;gt; {&lt;BR /&gt;            table.loadAsync()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            table.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;                &lt;SPAN&gt;if &lt;/SPAN&gt;(&lt;SPAN&gt;table&lt;/SPAN&gt;.getLoadStatus() == LoadStatus.&lt;SPAN&gt;LOADED&lt;/SPAN&gt;) {&lt;BR /&gt;                    System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Loaded feature table: " &lt;/SPAN&gt;+ &lt;SPAN&gt;table&lt;/SPAN&gt;.getTableName())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                    System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to load feature table: " &lt;/SPAN&gt;+ &lt;SPAN&gt;table&lt;/SPAN&gt;.getTableName())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                }&lt;BR /&gt;            })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;private &lt;/SPAN&gt;FeatureLayer &lt;SPAN&gt;createFeatureLayer&lt;/SPAN&gt;(GeodatabaseFeatureTable table) {&lt;BR /&gt;        FeatureLayer featureLayer = &lt;SPAN&gt;new &lt;/SPAN&gt;FeatureLayer(table)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        featureLayer.loadAsync()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        featureLayer.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;            &lt;SPAN&gt;if &lt;/SPAN&gt;(&lt;SPAN&gt;featureLayer&lt;/SPAN&gt;.getLoadStatus() == LoadStatus.&lt;SPAN&gt;LOADED&lt;/SPAN&gt;) {&lt;BR /&gt;                System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Feature layer loaded: " &lt;/SPAN&gt;+ &lt;SPAN&gt;table&lt;/SPAN&gt;.getTableName())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            } &lt;SPAN&gt;else &lt;/SPAN&gt;{&lt;BR /&gt;                System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Failed to load feature layer: " &lt;/SPAN&gt;+ &lt;SPAN&gt;table&lt;/SPAN&gt;.getTableName())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        return &lt;/SPAN&gt;featureLayer&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;private &lt;/SPAN&gt;CompletableFuture&amp;lt;GeodatabaseFeatureTable&amp;gt; &lt;SPAN&gt;createGeodatabaseFeatureTable&lt;/SPAN&gt;(String name&lt;SPAN&gt;, &lt;/SPAN&gt;GeometryType geoType&lt;SPAN&gt;, boolean &lt;/SPAN&gt;hasAlt) {&lt;BR /&gt;        &lt;SPAN&gt;return &lt;/SPAN&gt;CompletableFuture.&lt;SPAN&gt;supplyAsync&lt;/SPAN&gt;(() -&amp;gt; {&lt;BR /&gt;            TableDescription tableDescription = createTableDescription(&lt;SPAN&gt;name&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;geoType&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;hasAlt&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;            ListenableFuture&amp;lt;GeodatabaseFeatureTable&amp;gt; futureTable = &lt;SPAN&gt;db&lt;/SPAN&gt;.createTableAsync(tableDescription)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            try &lt;/SPAN&gt;{&lt;BR /&gt;                GeodatabaseFeatureTable table = futureTable.get()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Created Feature Table: " &lt;/SPAN&gt;+ table.getTableName())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                return &lt;/SPAN&gt;table&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            } &lt;SPAN&gt;catch &lt;/SPAN&gt;(InterruptedException | ExecutionException e) {&lt;BR /&gt;                e.printStackTrace()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                return null;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        }&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;executorService&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;private &lt;/SPAN&gt;TableDescription &lt;SPAN&gt;createTableDescription&lt;/SPAN&gt;(String name&lt;SPAN&gt;, &lt;/SPAN&gt;GeometryType geomType&lt;SPAN&gt;, boolean &lt;/SPAN&gt;hasAlt) {&lt;BR /&gt;        TableDescription tableDescription = &lt;SPAN&gt;new &lt;/SPAN&gt;TableDescription(name&lt;SPAN&gt;, &lt;/SPAN&gt;SpatialReference.&lt;SPAN&gt;create&lt;/SPAN&gt;(&lt;SPAN&gt;4326&lt;/SPAN&gt;)&lt;SPAN&gt;, &lt;/SPAN&gt;geomType)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        List&amp;lt;FieldDescription&amp;gt; fieldDescriptions = List.&lt;SPAN&gt;of&lt;/SPAN&gt;(&lt;BR /&gt;                &lt;SPAN&gt;new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"MMSI"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"controlPoints"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"wkid"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"uniquedesignation"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"sidc"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"indicator"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"MyNotes"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"x"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;DOUBLE&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"z"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;DOUBLE&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"z2"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;DOUBLE&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"y"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;DOUBLE&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"distance"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;DOUBLE&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"direction"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;DOUBLE&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"speed"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;DOUBLE&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"datetimevalid"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"createdby"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"datetimeexpired"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;SPAN&gt;,&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;                new &lt;/SPAN&gt;FieldDescription(&lt;SPAN&gt;"datecreated"&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;Field.Type.&lt;SPAN&gt;TEXT&lt;/SPAN&gt;)&lt;BR /&gt;        )&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;        tableDescription.getFieldDescriptions().addAll(fieldDescriptions)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        tableDescription.setHasAttachments(&lt;SPAN&gt;false&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        tableDescription.setHasM(&lt;SPAN&gt;false&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        tableDescription.setHasZ(hasAlt)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;        return &lt;/SPAN&gt;tableDescription&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;&lt;BR /&gt;    &lt;SPAN&gt;public void &lt;/SPAN&gt;&lt;SPAN&gt;addFeatureToTrackTable&lt;/SPAN&gt;(Point point&lt;SPAN&gt;, &lt;/SPAN&gt;HashMap&amp;lt;String&lt;SPAN&gt;, &lt;/SPAN&gt;Object&amp;gt; attributes) {&lt;BR /&gt;        &lt;SPAN&gt;if &lt;/SPAN&gt;(&lt;SPAN&gt;trackFeatureTable&lt;/SPAN&gt;.getLoadStatus() != LoadStatus.&lt;SPAN&gt;LOADED&lt;/SPAN&gt;) {&lt;BR /&gt;            System.&lt;SPAN&gt;err&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Feature table is not loaded."&lt;/SPAN&gt;)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;            return;&lt;BR /&gt;&lt;/SPAN&gt;        }&lt;BR /&gt;&lt;BR /&gt;        Feature feature = &lt;SPAN&gt;trackFeatureTable&lt;/SPAN&gt;.createFeature(attributes&lt;SPAN&gt;, &lt;/SPAN&gt;point)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        ListenableFuture&amp;lt;Void&amp;gt; addFeatureFuture = &lt;SPAN&gt;trackFeatureTable&lt;/SPAN&gt;.addFeatureAsync(feature)&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;        addFeatureFuture.addDoneListener(() -&amp;gt; {&lt;BR /&gt;            &lt;SPAN&gt;try &lt;/SPAN&gt;{&lt;BR /&gt;                &lt;SPAN&gt;addFeatureFuture&lt;/SPAN&gt;.get()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;                System.&lt;SPAN&gt;out&lt;/SPAN&gt;.println(&lt;SPAN&gt;"Feature added to TRACK_TABLE: " &lt;/SPAN&gt;+ &lt;SPAN&gt;feature&lt;/SPAN&gt;.getAttributes())&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            } &lt;SPAN&gt;catch &lt;/SPAN&gt;(InterruptedException | ExecutionException e) {&lt;BR /&gt;                e.printStackTrace()&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;            }&lt;BR /&gt;        })&lt;SPAN&gt;;&lt;BR /&gt;&lt;/SPAN&gt;    }&lt;BR /&gt;}&lt;/PRE&gt;&lt;/DIV&gt;</description>
      <pubDate>Thu, 11 Jul 2024 08:37:05 GMT</pubDate>
      <guid>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1504010#M2860</guid>
      <dc:creator>rod182211</dc:creator>
      <dc:date>2024-07-11T08:37:05Z</dc:date>
    </item>
    <item>
      <title>Re: No data error GeoDatabase</title>
      <link>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1504019#M2861</link>
      <description>&lt;P&gt;I tried to minimize to this but still no luck&amp;nbsp;&lt;/P&gt;&lt;P&gt;package com.neoplexus.database;&lt;/P&gt;&lt;P&gt;import com.esri.arcgisruntime.concurrent.ListenableFuture;&lt;BR /&gt;import com.esri.arcgisruntime.data.*;&lt;BR /&gt;import com.esri.arcgisruntime.geometry.GeometryType;&lt;BR /&gt;import com.esri.arcgisruntime.geometry.Point;&lt;BR /&gt;import com.esri.arcgisruntime.geometry.SpatialReference;&lt;BR /&gt;import com.esri.arcgisruntime.layers.FeatureLayer;&lt;BR /&gt;import com.esri.arcgisruntime.loadable.LoadStatus;&lt;/P&gt;&lt;P&gt;import java.io.File;&lt;BR /&gt;import java.io.IOException;&lt;BR /&gt;import java.util.HashMap;&lt;BR /&gt;import java.util.List;&lt;BR /&gt;import java.util.concurrent.*;&lt;/P&gt;&lt;P&gt;import static com.neoplexus.iris.Constants.GEO_DATABASE_FOLDER;&lt;/P&gt;&lt;P&gt;public class GeoDataBase {&lt;/P&gt;&lt;P&gt;private Geodatabase db;&lt;BR /&gt;private GeodatabaseFeatureTable trackFeatureTable;&lt;BR /&gt;private FeatureLayer trackFeatureLayer;&lt;BR /&gt;private ExecutorService executorService = Executors.newFixedThreadPool(4);&lt;/P&gt;&lt;P&gt;public void initializeGeodatabase() {&lt;BR /&gt;System.out.println("Geodatabase path: " + GEO_DATABASE_FOLDER);&lt;/P&gt;&lt;P&gt;executorService.submit(() -&amp;gt; {&lt;BR /&gt;// Ensure the directory structure exists&lt;BR /&gt;File geodatabaseFile = new File(GEO_DATABASE_FOLDER);&lt;BR /&gt;File parentDir = geodatabaseFile.getParentFile();&lt;/P&gt;&lt;P&gt;if (!parentDir.exists() &amp;amp;&amp;amp; !parentDir.mkdirs()) {&lt;BR /&gt;System.err.println("Failed to create directories: " + parentDir.getAbsolutePath());&lt;BR /&gt;return;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;// Check if the geodatabase file exists&lt;BR /&gt;if (!geodatabaseFile.exists()) {&lt;BR /&gt;try {&lt;BR /&gt;if (geodatabaseFile.createNewFile()) {&lt;BR /&gt;System.out.println("Geodatabase file created: " + geodatabaseFile.getAbsolutePath());&lt;BR /&gt;createGeodatabase(geodatabaseFile.getAbsolutePath());&lt;BR /&gt;} else {&lt;BR /&gt;System.err.println("Failed to create geodatabase file.");&lt;BR /&gt;return;&lt;BR /&gt;}&lt;BR /&gt;} catch (IOException e) {&lt;BR /&gt;System.err.println("IOException: " + e.getMessage());&lt;BR /&gt;return;&lt;BR /&gt;}&lt;BR /&gt;} else {&lt;BR /&gt;System.out.println("Geodatabase file already exists: " + geodatabaseFile.getAbsolutePath());&lt;BR /&gt;loadGeodatabase(geodatabaseFile.getAbsolutePath());&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void createGeodatabase(String geodatabasePath) {&lt;BR /&gt;db = new Geodatabase(geodatabasePath);&lt;BR /&gt;db.loadAsync();&lt;BR /&gt;db.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (db.getLoadStatus() == LoadStatus.LOADED) {&lt;BR /&gt;createAndLoadFeatureTables();&lt;BR /&gt;} else {&lt;BR /&gt;handleLoadError();&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void loadGeodatabase(String geodatabasePath) {&lt;BR /&gt;db = new Geodatabase(geodatabasePath);&lt;BR /&gt;db.loadAsync();&lt;BR /&gt;db.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (db.getLoadStatus() == LoadStatus.LOADED) {&lt;BR /&gt;trackFeatureTable = findFeatureTableByName("TRACK_TABLE");&lt;/P&gt;&lt;P&gt;db.getGeodatabaseFeatureTables().forEach(table -&amp;gt; {&lt;BR /&gt;table.loadAsync();&lt;BR /&gt;table.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (table.getLoadStatus() != LoadStatus.LOADED) {&lt;BR /&gt;System.err.println("Failed to load feature table: " + table.getTableName());&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;});&lt;BR /&gt;initializeFeatureLayers();&lt;BR /&gt;} else {&lt;BR /&gt;handleLoadError();&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private GeodatabaseFeatureTable findFeatureTableByName(String tableName) {&lt;BR /&gt;return db.getGeodatabaseFeatureTables().stream()&lt;BR /&gt;.filter(table -&amp;gt; table.getTableName().equals(tableName))&lt;BR /&gt;.findFirst().orElse(null);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void initializeFeatureLayers() {&lt;BR /&gt;if (trackFeatureTable != null) {&lt;BR /&gt;trackFeatureLayer = createFeatureLayer(trackFeatureTable);&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void createAndLoadFeatureTables() {&lt;BR /&gt;CompletableFuture&amp;lt;GeodatabaseFeatureTable&amp;gt; futureTrackTable = createGeodatabaseFeatureTable("TRACK_TABLE");&lt;BR /&gt;futureTrackTable.thenAccept(table -&amp;gt; {&lt;BR /&gt;if (table != null) {&lt;BR /&gt;trackFeatureTable = table;&lt;BR /&gt;trackFeatureLayer = createFeatureLayer(trackFeatureTable);&lt;BR /&gt;}&lt;BR /&gt;});&lt;/P&gt;&lt;P&gt;db.getGeodatabaseFeatureTables().forEach(table -&amp;gt; {&lt;BR /&gt;table.loadAsync();&lt;BR /&gt;table.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (table.getLoadStatus() != LoadStatus.LOADED) {&lt;BR /&gt;System.err.println("Failed to load feature table: " + table.getTableName());&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;});&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private FeatureLayer createFeatureLayer(GeodatabaseFeatureTable table) {&lt;BR /&gt;FeatureLayer featureLayer = new FeatureLayer(table);&lt;BR /&gt;featureLayer.loadAsync();&lt;BR /&gt;featureLayer.addDoneLoadingListener(() -&amp;gt; {&lt;BR /&gt;if (featureLayer.getLoadStatus() == LoadStatus.LOADED) {&lt;BR /&gt;System.out.println("Feature layer loaded: " + table.getTableName());&lt;BR /&gt;} else {&lt;BR /&gt;System.err.println("Failed to load feature layer: " + table.getTableName());&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;return featureLayer;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private CompletableFuture&amp;lt;GeodatabaseFeatureTable&amp;gt; createGeodatabaseFeatureTable(String name) {&lt;BR /&gt;return CompletableFuture.supplyAsync(() -&amp;gt; {&lt;BR /&gt;TableDescription tableDescription = createTableDescription(name);&lt;/P&gt;&lt;P&gt;ListenableFuture&amp;lt;GeodatabaseFeatureTable&amp;gt; futureTable = db.createTableAsync(tableDescription);&lt;BR /&gt;try {&lt;BR /&gt;GeodatabaseFeatureTable table = futureTable.get();&lt;BR /&gt;System.out.println("Created Feature Table: " + table.getTableName());&lt;BR /&gt;return table;&lt;BR /&gt;} catch (InterruptedException | ExecutionException e) {&lt;BR /&gt;e.printStackTrace();&lt;BR /&gt;return null;&lt;BR /&gt;}&lt;BR /&gt;}, executorService);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private TableDescription createTableDescription(String name) {&lt;BR /&gt;TableDescription tableDescription = new TableDescription(name);&lt;/P&gt;&lt;P&gt;List&amp;lt;FieldDescription&amp;gt; fieldDescriptions = List.of(&lt;BR /&gt;new FieldDescription("MMSI", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("controlPoints", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("wkid", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("uniquedesignation", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("sidc", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("indicator", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("MyNotes", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("x", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("z", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("z2", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("y", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("distance", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("direction", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("speed", Field.Type.DOUBLE),&lt;BR /&gt;new FieldDescription("datetimevalid", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("createdby", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("datetimeexpired", Field.Type.TEXT),&lt;BR /&gt;new FieldDescription("datecreated", Field.Type.TEXT)&lt;BR /&gt;);&lt;/P&gt;&lt;P&gt;tableDescription.getFieldDescriptions().addAll(fieldDescriptions);&lt;BR /&gt;tableDescription.setHasAttachments(false);&lt;/P&gt;&lt;P&gt;return tableDescription;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;private void handleLoadError() {&lt;BR /&gt;System.err.println("Failed to load geodatabase.");&lt;BR /&gt;Throwable loadError = db.getLoadError();&lt;BR /&gt;if (loadError != null) {&lt;BR /&gt;System.err.println("Load error: " + loadError.getMessage());&lt;BR /&gt;loadError.printStackTrace();&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;public void addFeatureToTrackTable(Point point, HashMap&amp;lt;String, Object&amp;gt; attributes) {&lt;BR /&gt;if (trackFeatureTable.getLoadStatus() != LoadStatus.LOADED) {&lt;BR /&gt;System.err.println("Feature table is not loaded.");&lt;BR /&gt;return;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Feature feature = trackFeatureTable.createFeature(attributes, point);&lt;BR /&gt;ListenableFuture&amp;lt;Void&amp;gt; addFeatureFuture = trackFeatureTable.addFeatureAsync(feature);&lt;BR /&gt;addFeatureFuture.addDoneListener(() -&amp;gt; {&lt;BR /&gt;try {&lt;BR /&gt;addFeatureFuture.get();&lt;BR /&gt;System.out.println("Feature added to TRACK_TABLE: " + feature.getAttributes());&lt;BR /&gt;} catch (InterruptedException | ExecutionException e) {&lt;BR /&gt;e.printStackTrace();&lt;BR /&gt;}&lt;BR /&gt;});&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jul 2024 09:04:53 GMT</pubDate>
      <guid>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1504019#M2861</guid>
      <dc:creator>rod182211</dc:creator>
      <dc:date>2024-07-11T09:04:53Z</dc:date>
    </item>
    <item>
      <title>Re: No data error GeoDatabase</title>
      <link>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1504674#M2862</link>
      <description>&lt;P&gt;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/550174"&gt;@rod182211&lt;/a&gt;&amp;nbsp;can you add the code which shows how you are using the methods in that class.&amp;nbsp; Can you also indicate where you are seeing the error?&lt;/P&gt;&lt;P&gt;I suspect also I'm going to need the database file to reproduce this.&amp;nbsp; Is there a way you can get it to me?&amp;nbsp; I think you've been in email contact with me or Kerry previously.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 12 Jul 2024 08:50:35 GMT</pubDate>
      <guid>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1504674#M2862</guid>
      <dc:creator>MarkBaird</dc:creator>
      <dc:date>2024-07-12T08:50:35Z</dc:date>
    </item>
    <item>
      <title>Re: No data error GeoDatabase</title>
      <link>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1505678#M2864</link>
      <description>&lt;P&gt;Hi Mark, Thanks for the reply. I did a work around by creating the file in Arcgis Pro first. This seemed to work. It looks like the schema is not being initially developed.&lt;/P&gt;</description>
      <pubDate>Tue, 16 Jul 2024 06:28:02 GMT</pubDate>
      <guid>https://community.esri.com/t5/java-maps-sdk-questions/no-data-error-geodatabase/m-p/1505678#M2864</guid>
      <dc:creator>rod182211</dc:creator>
      <dc:date>2024-07-16T06:28:02Z</dc:date>
    </item>
  </channel>
</rss>

