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))