public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.actionbar_menu, menu);  
  return true;
 }
 
 public boolean onOptionsItemSelected(MenuItem item) {  
  
  switch (item.getItemId()){ 
  
  case R.id.SearchTool: 
   AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
                        //This is where I manually entered in my location names.
   final String[] locations = {"Blue Water", "Big Fish ", "Beaverdam", "Wake", "Dock Side", "Oceanview", "Beach 
                        Front", "Lake Side", "Boaters Choice"};
   dialogBuilder.setTitle("Select a Location:");
   dialogBuilder.setItems(locations, new DialogInterface.OnClickListener() {
    
    @Override
    public void onClick(DialogInterface dialog, int which) {
     //Do something when location is selected within the alertdialog.
    }
   });
   AlertDialog alertDialog = dialogBuilder.create();
   alertDialog.show();
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		 
					
				
		
import com.esri.android.map.GraphicsLayer;
import com.esri.android.map.MapView;
import com.esri.core.map.FeatureSet;
import com.esri.core.map.Graphic;
import com.esri.core.tasks.ags.query.Query;
import com.esri.core.tasks.ags.query.QueryTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
//MapScreen is a subclass of Activity.
public class MapScreen extends Activity { 
 
 public MapView map;
 boolean AlrtDialogQeury = true; 
 GraphicsLayer gl;
 Graphic graphic;
 String targetServerURL = "MAP SERVICE URL";
 
 /* 
  Called when the Activity is first created.
  Remember the Activity and its methods are created
  first. Then the MapScreen class is used.  
  */
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.mapscreen);  
 
  map = (MapView) findViewById(R.id.map);      
 }
 
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.actionbar_menu, menu);  
  return true;
 }
 
 public boolean onOptionsItemSelected(MenuItem item) {  
  
  switch (item.getItemId()){ 
  
  case R.id.SearchTool: 
   
    String targetLayer = targetServerURL;
    String[] queryParams = { targetLayer, "Name" };
    AsyncQueryTask ayncQuery = new AsyncQueryTask();
    ayncQuery.execute(queryParams);     
   
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);   
    String location1 = graphic.getAttributeValue("Name").toString();
    String[] location2 = {location1};
    dialogBuilder.setTitle("Select a Location");
    dialogBuilder.setItems(location2, new DialogInterface.OnClickListener() {
     
      @Override
      public void onClick(DialogInterface dialog, int which) {
       //Do something when clicked.     
     }
    });
    AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.show();       
   }
  return true;
   
 }
 
 private class AsyncQueryTask extends AsyncTask<String, Void, FeatureSet> { 
  protected FeatureSet doInBackground(String... queryParams) {
   if (queryParams == null || queryParams.length <= 1)
    return null;
   //My query may be wrong.
   String url = queryParams[0];
   Query query = new Query();
   String whereClause = queryParams[1];
   query.setWhere(whereClause);
   QueryTask qTask = new QueryTask(url);
   FeatureSet fs = null;
   try {
    fs = qTask.execute(query);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return fs;
   }
   return fs;
  }
  //I think this is where I can't make it work.
  protected void onPostExecute(FeatureSet fs) {    
   if (fs != null) {     
    Graphic[] grs = fs.getGraphics();     
    gl.addGraphics(grs);    
   }  
  }
 }   
} 
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		 
					
				
		
Thomas,
Thanks for the information.
I tried implementing your steps into my code, but I when I select the search icon (menu item) my app crashes.
Using graphic arrays and string arrays has me confused.
I think I'm not doing something right with the onPostExecute or it might be that my query is jacked up.
Got any advice?
Thanks for your help.
Here is my code:
import com.esri.android.map.GraphicsLayer; import com.esri.android.map.MapView; import com.esri.core.map.FeatureSet; import com.esri.core.map.Graphic; import com.esri.core.tasks.ags.query.Query; import com.esri.core.tasks.ags.query.QueryTask; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; //MapScreen is a subclass of Activity. public class MapScreen extends Activity { public MapView map; boolean AlrtDialogQeury = true; GraphicsLayer gl; Graphic graphic; String targetServerURL = "MAP SERVICE URL"; /* Called when the Activity is first created. Remember the Activity and its methods are created first. Then the MapScreen class is used. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mapscreen); map = (MapView) findViewById(R.id.map); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbar_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.SearchTool: String targetLayer = targetServerURL; String[] queryParams = { targetLayer, "Name" }; AsyncQueryTask ayncQuery = new AsyncQueryTask(); ayncQuery.execute(queryParams); AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); String location1 = graphic.getAttributeValue("Name").toString(); String[] location2 = {location1}; dialogBuilder.setTitle("Select a Location"); dialogBuilder.setItems(location2, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Do something when clicked. } }); AlertDialog alertDialog = dialogBuilder.create(); alertDialog.show(); } return true; } private class AsyncQueryTask extends AsyncTask<String, Void, FeatureSet> { protected FeatureSet doInBackground(String... queryParams) { if (queryParams == null || queryParams.length <= 1) return null; //My query may be wrong. String url = queryParams[0]; Query query = new Query(); String whereClause = queryParams[1]; query.setWhere(whereClause); QueryTask qTask = new QueryTask(url); FeatureSet fs = null; try { fs = qTask.execute(query); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return fs; } return fs; } //I think this is where I can't make it work. protected void onPostExecute(FeatureSet fs) { if (fs != null) { Graphic[] grs = fs.getGraphics(); gl.addGraphics(grs); } } } }
package com.dhec.MPOS;
import com.esri.android.map.MapView;
import com.esri.core.geometry.Envelope;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.map.FeatureSet;
import com.esri.core.map.Graphic;
import com.esri.core.tasks.ags.query.Query;
import com.esri.core.tasks.ags.query.QueryTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;
//MapScreen is a subclass of Activity.
public class MapScreen extends Activity {
 public MapView map;
 String targetServerURL = "MAP SERVER HERE";
 /*
  * Called when the Activity is first created. Remember the Activity and its
  * methods are created first. Then the MapScreen class is used.
  */
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.mapscreen);
  map = (MapView) findViewById(R.id.map);
 }
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.actionbar_menu, menu);
  return true;
 }
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.SearchTool:
   String targetLayer = targetServerURL;
   String[] queryParams = { targetLayer, "Name" };
   AsyncQueryTask ayncQuery = new AsyncQueryTask();
   ayncQuery.execute(queryParams);
  }
  return false;
 }
 private class AsyncQueryTask extends AsyncTask<String, Void, FeatureSet> {
  /**
   * First member in parameter array is the query URL; second member is
   * the where clause.
   */
  protected FeatureSet doInBackground(String... queryParams) {
   if (queryParams == null || queryParams.length <= 1)
    return null;
   String url = queryParams[0];
   Query query = new Query();
   String whereClause = queryParams[1];
   query.setOutFields(queryParams);
   SpatialReference sr = SpatialReference.create(4326);
   query.setGeometry(new Envelope(-9246560.42264577, 3775709.72082467,
     -8746857.60892366, 4180002.76740144));
   query.setOutSpatialReference(sr);
   query.setReturnGeometry(true);
   query.setWhere(whereClause);
   QueryTask qTask = new QueryTask(url);
   FeatureSet fs = null;
   try {
    fs = qTask.execute(query);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return fs;
   }
   return fs;
  }
  protected void onPostExecute(FeatureSet result) {
   Object location1 = null;   
   String message = "No result comes back";
   
   Graphic[] grs = result.getGraphics();
   if (result != null && grs.length > 0){
      
   
    for (int i = 0; i <= grs.length; i++) {
    Graphic g = grs;
    location1 = g.getAttributeValue("Name");
      
    }   
      
   AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MapScreen.this);
   String[] location2 = { location1.toString() };
   dialogBuilder.setTitle("Select a Location:");
   dialogBuilder.setItems(marinas, new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
       // Do something once clicked
      }
     });
   AlertDialog alertDialog = dialogBuilder.create();
   alertDialog.show();  
  
   
   }
   else{
    Toast toast = Toast.makeText(MapScreen.this, message,
      Toast.LENGTH_LONG);
    toast.show();
    
   }
 
  }
 }
}
04-09 13:36:09.895: W/dalvikvm(15894): threadid=1: thread exiting with uncaught exception (group=0x40ab3210) 04-09 13:36:09.902: E/AndroidRuntime(15894): FATAL EXCEPTION: main 04-09 13:36:09.902: E/AndroidRuntime(15894): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 04-09 13:36:09.902: E/AndroidRuntime(15894): at com.dhec.MPOS.MapScreen$AsyncQueryTask.onPostExecute(MapScreen.java:98) 04-09 13:36:09.902: E/AndroidRuntime(15894): at com.dhec.MPOS.MapScreen$AsyncQueryTask.onPostExecute(MapScreen.java:1) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.AsyncTask.finish(AsyncTask.java:602) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.AsyncTask.access$600(AsyncTask.java:156) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.Handler.dispatchMessage(Handler.java:99) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.Looper.loop(Looper.java:137) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.app.ActivityThread.main(ActivityThread.java:4722) 04-09 13:36:09.902: E/AndroidRuntime(15894): at java.lang.reflect.Method.invokeNative(Native Method) 04-09 13:36:09.902: E/AndroidRuntime(15894): at java.lang.reflect.Method.invoke(Method.java:511) 04-09 13:36:09.902: E/AndroidRuntime(15894): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 04-09 13:36:09.902: E/AndroidRuntime(15894): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 04-09 13:36:09.902: E/AndroidRuntime(15894): at dalvik.system.NativeStart.main(Native Method)
protected void onPostExecute(FeatureSet result) {   
   
   if (result != null) {
    
    Graphic[] graphics = result.getGraphics();     
    gl.addGraphics(graphics);   
    Graphic g = graphics[0]; 
    String location1 = (String) g.getAttributeValue("Name");       
    
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MapScreen.this); 
    String[] location2 = {location1};
    dialogBuilder.setTitle("Select a Location:");
    dialogBuilder.setItems(location2, new DialogInterface.OnClickListener() {
    
       @Override
       public void onClick(DialogInterface dialog, int which) {
        // Do something once clicked
       }
      });
   
    AlertDialog alertDialog = dialogBuilder.create();     
    alertDialog.show();
    }
  
   }
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		 
					
				
		
I've tried everything. I can't get it to work.
My Alertdialog will not populate with the names of locations, from the Name field, from my layer, within a map service.
What am I doing wrong SPECIFICALLY?
FYI - I've referred to the query example.
Any help is appreciated.
Thanks,
This is my new code:
package com.dhec.MPOS; import com.esri.android.map.MapView; import com.esri.core.geometry.Envelope; import com.esri.core.geometry.SpatialReference; import com.esri.core.map.FeatureSet; import com.esri.core.map.Graphic; import com.esri.core.tasks.ags.query.Query; import com.esri.core.tasks.ags.query.QueryTask; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; //MapScreen is a subclass of Activity. public class MapScreen extends Activity { public MapView map; String targetServerURL = "MAP SERVER HERE"; /* * Called when the Activity is first created. Remember the Activity and its * methods are created first. Then the MapScreen class is used. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mapscreen); map = (MapView) findViewById(R.id.map); } public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbar_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.SearchTool: String targetLayer = targetServerURL; String[] queryParams = { targetLayer, "Name" }; AsyncQueryTask ayncQuery = new AsyncQueryTask(); ayncQuery.execute(queryParams); } return false; } private class AsyncQueryTask extends AsyncTask<String, Void, FeatureSet> { /** * First member in parameter array is the query URL; second member is * the where clause. */ protected FeatureSet doInBackground(String... queryParams) { if (queryParams == null || queryParams.length <= 1) return null; String url = queryParams[0]; Query query = new Query(); String whereClause = queryParams[1]; query.setOutFields(queryParams); SpatialReference sr = SpatialReference.create(4326); query.setGeometry(new Envelope(-9246560.42264577, 3775709.72082467, -8746857.60892366, 4180002.76740144)); query.setOutSpatialReference(sr); query.setReturnGeometry(true); query.setWhere(whereClause); QueryTask qTask = new QueryTask(url); FeatureSet fs = null; try { fs = qTask.execute(query); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return fs; } return fs; } protected void onPostExecute(FeatureSet result) { Object location1 = null; String message = "No result comes back"; Graphic[] grs = result.getGraphics(); if (result != null && grs.length > 0){ for (int i = 0; i <= grs.length; i++) { Graphic g = grs; location1 = g.getAttributeValue("Name"); } AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MapScreen.this); String[] location2 = { location1.toString() }; dialogBuilder.setTitle("Select a Location:"); dialogBuilder.setItems(marinas, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Do something once clicked } }); AlertDialog alertDialog = dialogBuilder.create(); alertDialog.show(); } else{ Toast toast = Toast.makeText(MapScreen.this, message, Toast.LENGTH_LONG); toast.show(); } } } }
This is my log cat:
04-09 13:36:09.895: W/dalvikvm(15894): threadid=1: thread exiting with uncaught exception (group=0x40ab3210) 04-09 13:36:09.902: E/AndroidRuntime(15894): FATAL EXCEPTION: main 04-09 13:36:09.902: E/AndroidRuntime(15894): java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 04-09 13:36:09.902: E/AndroidRuntime(15894): at com.dhec.MPOS.MapScreen$AsyncQueryTask.onPostExecute(MapScreen.java:98) 04-09 13:36:09.902: E/AndroidRuntime(15894): at com.dhec.MPOS.MapScreen$AsyncQueryTask.onPostExecute(MapScreen.java:1) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.AsyncTask.finish(AsyncTask.java:602) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.AsyncTask.access$600(AsyncTask.java:156) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.Handler.dispatchMessage(Handler.java:99) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.os.Looper.loop(Looper.java:137) 04-09 13:36:09.902: E/AndroidRuntime(15894): at android.app.ActivityThread.main(ActivityThread.java:4722) 04-09 13:36:09.902: E/AndroidRuntime(15894): at java.lang.reflect.Method.invokeNative(Native Method) 04-09 13:36:09.902: E/AndroidRuntime(15894): at java.lang.reflect.Method.invoke(Method.java:511) 04-09 13:36:09.902: E/AndroidRuntime(15894): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 04-09 13:36:09.902: E/AndroidRuntime(15894): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 04-09 13:36:09.902: E/AndroidRuntime(15894): at dalvik.system.NativeStart.main(Native Method)
package com.dhec.MPOS;
import com.esri.android.map.MapView;
import com.esri.core.map.FeatureSet;
import com.esri.core.map.Graphic;
import com.esri.core.tasks.ags.query.Query;
import com.esri.core.tasks.ags.query.QueryTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
//MapScreen is a subclass of Activity.
public class MapScreen extends Activity {
 public MapView map;
 /*
  * Called when the Activity is first created. Remember the Activity and its
  * methods are created first. Then the MapScreen class is used.
  */
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.mapscreen);
  map = (MapView) findViewById(R.id.map);
 }
 public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.actionbar_menu, menu);
  return true;
 }
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.SearchTool:
   Query query = new Query();
   query.setWhere("State = 'South Carolina'");
   query.setReturnGeometry(true);
   String[] outfields = new String[] { "Name" };
   query.setOutFields(outfields);
   query.setOutSpatialReference(map.getSpatialReference());
   Query[] queryParams = { query };
   AsyncQueryTask qt = new AsyncQueryTask();
   qt.execute(queryParams);
  }
  return false;
 }
 private class AsyncQueryTask extends AsyncTask<Query, Void, FeatureSet> {
  protected FeatureSet doInBackground(Query... params) {
   if (params.length > 0) {
    Query query = params[0];
    QueryTask queryTask = new QueryTask(
      "Put MAP SERVER URL HERE");
    try {
     FeatureSet fs = queryTask.execute(query);
     return fs;
    } catch (Exception e) {
     e.printStackTrace();
     return null;
    }
   }
   return null;
  }
  protected void onPostExecute(FeatureSet result) {
   if (result != null) {
    
    Graphic[] graphics = result.getGraphics();
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MapScreen.this);
    dialogBuilder.setTitle("Select a Location:");
    String[] arr = new String[graphics.length];
   
    for (int i = 0; i < graphics.length; i++) {
     Graphic g = graphics;
     arr = (String) g.getAttributeValue("Name");
    }
    
    dialogBuilder.setItems(arr, new DialogInterface.OnClickListener() {
       @Override
       public void onClick(DialogInterface dialog,int which) {
        //This is where you tell the application to do something once you click 
        //the name within the alert dialog.
       }
      });
    AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.show();
   }
  }
 }
}
