public class EngineTest { @SuppressWarnings("deprecation") public static void main(String[] args) { try { //Step 1: Initialize the Java Componet Object Model (COM) Interop. EngineInitializer.initializeEngine(); //Step 2: Initialize a valid license. new AoInitialize().initialize (esriLicenseProductCode.esriLicenseProductCodeEngine); //Step 3 : Invoke ArcObjects. MapDocument mapDocument = new MapDocument(); if (mapDocument.isPresent("D:\\Tellus_Sedimentary_Basin.mxd")) { mapDocument.open("D:\\Tellus_Sedimentary_Basin.mxd",""); mapDocument.setAuthor("Brian Varela"); IMap main_map = mapDocument.getMap(0); IFeatureLayer layer = (IFeatureLayer) main_map.getLayer(0); IFeatureClass classLayer = layer.getFeatureClass(); IDataLayer2 dataLayer = (IDataLayer2) layer; IDatasetName name = (IDatasetName) dataLayer.getDataSourceName(); IWorkspaceName workspace = name.getWorkspaceName(); ListLayers((Map)mapDocument.getMap(0)); System.out.println("Layer "+layer.getName()+" located at "+workspace.getPathName()+" "+layer.getDisplayField()); } } catch (IOException ex) { System.out.println(ex.getMessage()); System.out.println("App failed."); } finally { try { //Step 4: Release the license. new AoInitialize().shutdown(); System.out.println("License released!"); } catch (IOException ex) { ex.printStackTrace(); } } } //End of method main. public static void ListLayers(com.esri.arcgis.carto.Map map) { try{ for(int i=0; i<map.getLayerCount(); i++) { System.out.println("Layer "+i+". "+map.getLayer(i).getName()); } }catch(AutomationException ae) { ae.printStackTrace(); }catch(IOException e) { e.printStackTrace(); } } } //End of class
Solved! Go to Solution.
public void saveLayerEdits(String whereClause){ IQueryFilter queryFilter; try { FeatureLayer fl = "however you get your featurelayer" IFeatureClass featureClass = fl.getFeatureClass(); // Restrict the number of features to be updated using a QueryFilter and Where clause. queryFilter = new QueryFilter(); queryFilter.setWhereClause(fl.getOIDFieldName() + " = " + whereClause); // Use IFeatureClass.Update to populate IFeatureCursor. IFeatureCursor updateCursor = featureClass.IFeatureClass_update(queryFilter, false); int theFieldIndex = featureClass.findField("The name of the field you want to update"); // Loop through the cursor and update the values IFeature feature = null; while ((feature = updateCursor.nextFeature()) != null){ feature.setValue(theFieldIndex, "The value you want this field to have"); updateCursor.updateFeature(feature); } // If the cursor is no longer needed, release it. Cleaner.release(updateCursor); } catch (AutomationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
. . . IMap main_map = mapDocument.getMap(0); IFeatureLayer layer = (IFeatureLayer) main_map.getLayer(0); listAttributes((FeatureLayer) layer);
public static void listAttributes(com.esri.arcgis.carto.FeatureLayer fl) { try { IFeatureClass featureClass = fl.getFeatureClass(); IFeatureCursor updateCursor = featureClass.search(null, false); int theFieldIndex = featureClass.findField("BASIN_NAME"); IFeature feature = null; while((feature = updateCursor.nextFeature()) != null) { System.out.println( (String)feature.getValue(theFieldIndex)); } } catch (AutomationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
I'm still getting a java.lang.NullPointerException.
Bummer.
On what line?
IFeatureCursor updateCursor = featureClass.search(null, false);
That is probably because your fl is an IFeatureLayer, when you need a FeatureLayer.
listAttributes((FeatureLayer) main_map.getLayer(0));
/** * ESRI sample method to get feature class layer by name, instead of index. * @param layerName the layer name as <code>String</code>. * @return layer as <code>FeatureLayer</code>. */ public FeatureLayer getLayerByName(String layerName) { FeatureLayer layer = null; try { for (int i = 0; i < s_iMap.getLayerCount(); i++) { if (s_iMap.getLayer(i).getName().equalsIgnoreCase(layerName)) { layer = (FeatureLayer) s_iMap.getLayer(i); break; } } } catch (AutomationException ae) { ae.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // Returns the featurelayer return layer; }
FeatureLayer fl = (FeatureLayer) getLayerByName("your layer name as it is spelled in the map document");/** * ESRI sample method to get feature class layer by name, instead of index. * @param layerName the layer name as <code>String</code>. * @return layer as <code>FeatureLayer</code>. */ public FeatureLayer getLayerByName(String layerName) { FeatureLayer layer = null; try { for (int i = 0; i < s_iMap.getLayerCount(); i++) { if (s_iMap.getLayer(i).getName().equalsIgnoreCase(layerName)) { layer = (FeatureLayer) s_iMap.getLayer(i); break; } } } catch (AutomationException ae) { ae.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // Returns the featurelayer return layer; }
s_iMap is a reference to the current IMap of your map document.
layer = (FeatureLayer) s_iMap.getLayer(i)
listAttributes((FeatureLayer) main_map.getLayer(0))
listAttributes((FeatureLayer) main_map.getLayer(0))