EX10_06_04.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:7k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex10_06;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Locale;
  5. import java.util.Random;
  6. import android.content.Intent;
  7. import android.database.Cursor;
  8. import android.location.Address;
  9. import android.location.Geocoder;
  10. import android.os.Bundle;
  11. import android.view.Menu;
  12. import android.view.MenuItem;
  13. import android.widget.TextView;
  14. import com.google.android.maps.GeoPoint;
  15. import com.google.android.maps.MapActivity;
  16. import com.google.android.maps.MapController;
  17. import com.google.android.maps.MapView;
  18. import com.google.android.maps.Overlay;
  19. public class EX10_06_04 extends MapActivity
  20. {
  21.   private TextView mTextView01;
  22.   /* 独一无二的menu选项identifier,用以识别事件 */
  23.   static final private int MENU_ADD = Menu.FIRST;
  24.   static final private int MENU_EDIT = Menu.FIRST+1;
  25.   static final private int MENU_DRAW = Menu.FIRST+2;
  26.   
  27.   /* Google地图所需成员变量 */
  28.   private MapView mMapView01;
  29.   private int intZoomLevel=20;
  30.   
  31.   /* 数据库所需成员变量 */
  32.   private MySQLiteOpenHelper dbHelper=null;
  33.   private int version = 1;
  34.   private List<String> allRestaurantID;
  35.   private List<String> allRestaurantName;
  36.   private List<String> allRestaurantAddress;
  37.   private List<String> allRestaurantCal;
  38.   
  39.   /* 数据库数据表 */
  40.   private String tables[] = { "t_restaurant" };
  41.   
  42.   /* 数据库字段名称 */
  43.   private String fieldNames[][] =
  44.   {
  45.     { "f_id", "f_name", "f_address", "f_cal" }
  46.   };
  47.   
  48.   /* 数据库字段数据类型 */
  49.   private String fieldTypes[][] =
  50.   {
  51.     { "INTEGER PRIMARY KEY AUTOINCREMENT", "text" , "text", "text"}
  52.   };
  53.   
  54.   @Override
  55.   protected void onCreate(Bundle savedInstanceState)
  56.   {
  57.     // TODO Auto-generated method stub
  58.     super.onCreate(savedInstanceState);
  59.     setContentView(R.layout.layout_draw);
  60.     
  61.     mTextView01 = (TextView)findViewById(R.id.myTextView7);
  62.     /* 创建MapView对象 */
  63.     mMapView01 = (MapView)findViewById(R.id.myMapView1);
  64.     
  65.     /* 数据库连接 */
  66.     dbHelper = new MySQLiteOpenHelper
  67.     (this, "mydb", null, version, tables, fieldNames, fieldTypes);
  68.     
  69.     /* 系统选择餐馆 */
  70.     drawRestaurant();
  71.   }
  72.   
  73.   @Override
  74.   public boolean onCreateOptionsMenu(Menu menu)
  75.   {
  76.     // TODO Auto-generated method stub
  77.     /* menu群组ID */
  78.     int idGroup1 = 0;
  79.     
  80.     /* The order position of the item */
  81.     int orderItem1 = Menu.NONE;
  82.     int orderItem2 = Menu.NONE+1;
  83.     int orderItem3 = Menu.NONE+2;
  84.     
  85.     /* 创建3个Menu菜单 */
  86.     menu.add(idGroup1, MENU_ADD, orderItem1, R.string.str_manu1).
  87.     setIcon(android.R.drawable.ic_menu_add);
  88.     menu.add(idGroup1, MENU_EDIT, orderItem2, R.string.str_manu2).
  89.     setIcon(android.R.drawable.ic_dialog_info);
  90.     menu.add(idGroup1, MENU_DRAW, orderItem3, R.string.str_manu3).
  91.     setIcon(R.drawable.hipposmall);
  92.     return super.onCreateOptionsMenu(menu);
  93.   }
  94.   
  95.   @Override
  96.   public boolean onMenuItemSelected(int featureId, MenuItem item)
  97.   {
  98.     // TODO Auto-generated method stub
  99.     Intent intent = new Intent();
  100.     switch(item.getItemId())
  101.     {
  102.       case (MENU_ADD):
  103.         /* 新建餐厅资料 */
  104.         intent.setClass(EX10_06_04.this, EX10_06_02.class);
  105.         startActivity(intent);
  106.         finish();
  107.         break;
  108.       case (MENU_EDIT):
  109.         /* 编辑餐厅数据 */
  110.         intent.setClass(EX10_06_04.this, EX10_06_03.class);
  111.         startActivity(intent);
  112.         finish();
  113.         break;
  114.       case (MENU_DRAW):
  115.         /* 今天吃什么? */
  116.         drawRestaurant();
  117.         break;
  118.     }
  119.     return super.onMenuItemSelected(featureId, item);
  120.   }
  121.   
  122.   /* 自定义随机数取得餐厅数据函数 */
  123.   private void drawRestaurant()
  124.   {
  125.     String f[] = { "f_id", "f_name", "f_address", "f_cal"};
  126.     /* SELECT f[] FROM tables[0] */
  127.     Cursor c = dbHelper.select
  128.     (
  129.       tables[0], f, "", null, null, null, null
  130.     );
  131.     allRestaurantID = new ArrayList<String>();
  132.     allRestaurantName = new ArrayList<String>();
  133.     allRestaurantAddress = new ArrayList<String>();
  134.     allRestaurantCal = new ArrayList<String>();
  135.     
  136.     /* 将所有餐厅数据放入List<String>对象 */
  137.     while (c.moveToNext())
  138.     {
  139.       allRestaurantID.add(c.getString(0));
  140.       allRestaurantName.add(c.getString(1));
  141.       allRestaurantAddress.add(c.getString(2));
  142.       allRestaurantCal.add(c.getString(3));
  143.     }
  144.     
  145.     if(allRestaurantID.size()>0)
  146.     {
  147.       Random generator = new Random();
  148.       int intThrowIndex = generator.nextInt(allRestaurantID.size());
  149.       mTextView01.setText
  150.       (
  151.         allRestaurantName.get(intThrowIndex)+"n"+
  152.         allRestaurantAddress.get(intThrowIndex)+"n"+
  153.         allRestaurantCal.get(intThrowIndex)+
  154.         getResources().getText(R.string.str_cal)
  155.       );
  156.       
  157.       /* 以地址查询地理坐标 */
  158.       GeoPoint gp = 
  159.       getGeoByAddress(allRestaurantAddress.get(intThrowIndex));
  160.       if(gp==null)
  161.       {
  162.         /* 地址无法反查为GeoPoint时 */
  163.         mMapView01.setVisibility(MapView.GONE);
  164.       }
  165.       else
  166.       {
  167.         /* 更新MapView地图 */
  168.         mMapView01.setVisibility(MapView.VISIBLE);
  169.         showImageOverlay(gp);
  170.         refreshMapViewByGeoPoint
  171.         (
  172.           getGeoByAddress(allRestaurantAddress.get(intThrowIndex)),
  173.           mMapView01, intZoomLevel, true
  174.         );
  175.       }
  176.     }
  177.     else
  178.     {
  179.       /* 数据库无记录 */
  180.       
  181.     }
  182.   }
  183.   
  184.   /**
  185.    * 查询地址的地理坐标 
  186.    * @param strSearchAddress 地址字符串
  187.    * @return GeoPoint 地理坐标对象
  188.    */
  189.   private GeoPoint getGeoByAddress(String strSearchAddress)
  190.   {
  191.     GeoPoint gp = null;
  192.     try
  193.     {
  194.       if(strSearchAddress!="")
  195.       {
  196.         Geocoder mGeocoder01 = 
  197.         new Geocoder(EX10_06_04.this, Locale.getDefault());
  198.         List<Address> lstAddress = 
  199.         mGeocoder01.getFromLocationName(strSearchAddress, 1);
  200.         if (!lstAddress.isEmpty())
  201.         {
  202.           Address adsLocation = lstAddress.get(0);
  203.           /* 1E6 = 1000000*/
  204.           double geoLatitude = adsLocation.getLatitude()*1E6;
  205.           double geoLongitude = adsLocation.getLongitude()*1E6;
  206.           gp = new GeoPoint((int) geoLatitude, (int) geoLongitude);
  207.         }
  208.       }
  209.     }
  210.     catch (Exception e)
  211.     { 
  212.       e.printStackTrace(); 
  213.     }
  214.     return gp;
  215.   }
  216.   
  217.   /**
  218.    * 更新MapView地图
  219.    * @param gp GeoPoint地理坐标对象
  220.    * @param mv 查询的数据的字段名称
  221.    * @param zoomLevel 放大层级
  222.    * @param setSatellite 是否显示卫星地图
  223.    */
  224.   public static void refreshMapViewByGeoPoint
  225.   (GeoPoint gp, MapView mv, int zoomLevel, boolean setSatellite)
  226.   {
  227.     try
  228.     {
  229.       mv.displayZoomControls(true);
  230.       MapController mc = mv.getController();
  231.       mc.animateTo(gp);
  232.       mc.setZoom(zoomLevel);
  233.       mv.setSatellite(setSatellite);
  234.     }
  235.     catch(Exception e)
  236.     {
  237.       e.printStackTrace();
  238.     }
  239.   }
  240.   
  241.   /**
  242.    * 在地图上显示Overlay图片
  243.    * @param gp GeoPoint地理坐标对象
  244.    */
  245.   private void showImageOverlay(GeoPoint gp)
  246.   {
  247.     /* 设置Overlay */
  248.     GeoPointImageOverlay mLocationOverlay01;
  249.     mLocationOverlay01 = new GeoPointImageOverlay
  250.     (
  251.       gp,
  252.       R.drawable.hipposmall
  253.     );
  254.     List<Overlay> overlays = mMapView01.getOverlays();
  255.     overlays.add(mLocationOverlay01);
  256.   }
  257.   
  258.   @Override
  259.   protected boolean isRouteDisplayed()
  260.   {
  261.     // TODO Auto-generated method stub
  262.     return false;
  263.   }
  264. }