Flash builder 4.5支持Android平台之初体验

来源:互联网 发布:td lte网络 编辑:程序博客网 时间:2024/05/21 00:51

  Flash builder 4.5可以支持Android平台,俺尝试写了一些东西,算是第一次亲密接触。想法是这样的:将一些点的经纬度投射到Google Map上,并可浏览相关点的信息。

  数据储存

数据库使用MS SQL server 2008 R2 X64版本,创建数据表【Map201105】,该表描述点信息:

CREATE TABLE [dbo].[Map201105](

    [id] [int] IDENTITY(1,1) NOT NULL,

    [bianhao] [int] NULL,

    [zhengqibiaoshi] [nvarchar](255) NULL,

    [kehumingcheng] [nvarchar](255) NULL,

    [jiancheng] [nvarchar](255) NULL,

    [dengluyu] [nvarchar](255) NULL,

    [DVRtongdaohao] [int] NULL,

    [qianduangaicanshu] [nvarchar](255) NULL,

    [zhucedidian] [nvarchar](255) NULL,

    [zhushebeiID] [nvarchar](255) NULL,

    [jintouID] [nvarchar](255) NULL,

    [ADSL] [nvarchar](255) NULL,

    [GD163] [nvarchar](255) NULL,

    [GXSJ] [nvarchar](255) NULL,

    [BMQ] [nvarchar](255) NULL,

    [XSJ] [nvarchar](255) NULL,

    [CRMzhuangtai] [nvarchar](255) NULL,

    [tongduan] [nvarchar](255) NULL,

    [shigongfankui] [nvarchar](255) NULL,

    [xitonghuidanqingkuang] [nvarchar](255) NULL,

    [yanshou] [nvarchar](255) NULL,

    [beizhu] [nvarchar](255) NULL,

    [jingdu] [float] NULL,

    [weidu] [float] NULL,

 CONSTRAINT [PK_Map201105] PRIMARY KEY CLUSTERED

(

    [id] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

 

   这里注意[jingdu][weidu]列,表示在GoogleMap上投点坐标,由于使用手持GPS测量数据使用度分秒表示,所有俺创建另外一个表记录这些测量的数据,【Maplatlng】,

  CREATE TABLE [dbo].[Maplatlng](

    [id] [int] IDENTITY(1,1) NOT NULL,

    [Map110id] [int] NULL,

    [Lat] [int] NULL,

    [Lat_du] [int] NULL,

    [Lat_fen] [int] NULL,

    [Lat_miao] [float] NULL,

    [Lng] [int] NULL,

    [Lng_du] [int] NULL,

    [Lng_fen] [int] NULL,

    [Lng_miao] [float] NULL,

 CONSTRAINT [PK_Maplatlng] PRIMARY KEY CLUSTERED

(

    [id] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

 

GO

 

ALTER TABLE [dbo].[Maplatlng]  WITH CHECK ADD  CONSTRAINT [FK_Maplatlng_Map201105] FOREIGN KEY([Map110id])

REFERENCES [dbo].[Map201105] ([id])

GO

 

ALTER TABLE [dbo].[Maplatlng] CHECK CONSTRAINT [FK_Maplatlng_Map201105]

 

 [Map110id]是关联表【Map201105】外键。

 

JAVA对象

使用Hibernate持久化数据,变成Java对象,Map201105映射文件:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- Generated 2011-6-13 21:29:54 by Hibernate Tools 3.2.4.GA -->

<hibernate-mapping>

 <class catalog="XTJC" name="com.les.Gmap.Map201105" schema="dbo" table="Map201105">

  <id name="id" type="int">

   <column name="id"/>

   <generator class="assigned"/>

  </id>

  <property generated="never" lazy="false" name="bianhao" type="java.lang.Integer">

   <column name="bianhao"/>

  </property>

  <property generated="never" lazy="false" name="zhengqibiaoshi" type="string">

   <column name="zhengqibiaoshi"/>

  </property>

  <property generated="never" lazy="false" name="kehumingcheng" type="string">

   <column name="kehumingcheng"/>

  </property>

  <property generated="never" lazy="false" name="jiancheng" type="string">

   <column name="jiancheng"/>

  </property>

  <property generated="never" lazy="false" name="dengluyu" type="string">

   <column name="dengluyu"/>

  </property>

  <property generated="never" lazy="false" name="dvrtongdaohao" type="java.lang.Integer">

   <column name="DVRtongdaohao"/>

  </property>

  <property generated="never" lazy="false" name="qianduangaicanshu" type="string">

   <column name="qianduangaicanshu"/>

  </property>

  <property generated="never" lazy="false" name="zhucedidian" type="string">

   <column name="zhucedidian"/>

  </property>

  <property generated="never" lazy="false" name="zhushebeiId" type="string">

   <column name="zhushebeiID"/>

  </property>

  <property generated="never" lazy="false" name="jintouId" type="string">

   <column name="jintouID"/>

  </property>

  <property generated="never" lazy="false" name="adsl" type="string">

   <column name="ADSL"/>

  </property>

  <property generated="never" lazy="false" name="gd163" type="string">

   <column name="GD163"/>

  </property>

  <property generated="never" lazy="false" name="gxsj" type="string">

   <column name="GXSJ"/>

  </property>

  <property generated="never" lazy="false" name="bmq" type="string">

   <column name="BMQ"/>

  </property>

  <property generated="never" lazy="false" name="xsj" type="string">

   <column name="XSJ"/>

  </property>

  <property generated="never" lazy="false" name="crmzhuangtai" type="string">

   <column name="CRMzhuangtai"/>

  </property>

  <property generated="never" lazy="false" name="tongduan" type="string">

   <column name="tongduan"/>

  </property>

  <property generated="never" lazy="false" name="shigongfankui" type="string">

   <column name="shigongfankui"/>

  </property>

  <property generated="never" lazy="false" name="xitonghuidanqingkuang" type="string">

   <column name="xitonghuidanqingkuang"/>

  </property>

  <property generated="never" lazy="false" name="yanshou" type="string">

   <column name="yanshou"/>

  </property>

  <property generated="never" lazy="false" name="beizhu" type="string">

   <column name="beizhu"/>

  </property>

  <property generated="never" lazy="false" name="jingdu" type="java.lang.Double">

   <column name="jingdu" precision="53" scale="0"/>

  </property>

  <property generated="never" lazy="false" name="weidu" type="java.lang.Double">

   <column name="weidu" precision="53" scale="0"/>

  </property>

  <set fetch="select" inverse="true" lazy="false" name="maplatlngs"

   sort="unsorted" table="Maplatlng">

   <key>

    <column name="Map110id"/>

   </key>

   <one-to-many class="com.les.Gmap.Maplatlng"/>

  </set>

 </class>

</hibernate-mapping>

 

Maplatlng映射文件

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- Generated 2011-6-13 21:29:54 by Hibernate Tools 3.2.4.GA -->

<hibernate-mapping>

    <class name="com.les.Gmap.Maplatlng" table="Maplatlng" schema="dbo" catalog="XTJC">

        <id name="id" type="int">

            <column name="id" />

            <generator class="assigned" />

        </id>

        <many-to-one name="map201105" class="com.les.Gmap.Map201105" fetch="select">

            <column name="Map110id" />

        </many-to-one>

        <property name="lat" type="java.lang.Integer">

            <column name="Lat" />

        </property>

        <property name="latDu" type="java.lang.Integer">

            <column name="Lat_du" />

        </property>

        <property name="latFen" type="java.lang.Integer">

            <column name="Lat_fen" />

        </property>

        <property name="latMiao" type="java.lang.Double">

            <column name="Lat_miao" precision="53" scale="0" />

        </property>

        <property name="lng" type="java.lang.Integer">

            <column name="Lng" />

        </property>

        <property name="lngDu" type="java.lang.Integer">

            <column name="Lng_du" />

        </property>

        <property name="lngFen" type="java.lang.Integer">

            <column name="Lng_fen" />

        </property>

        <property name="lngMiao" type="java.lang.Double">

            <column name="Lng_miao" precision="53" scale="0" />

        </property>

    </class>

</hibernate-mapping>

 

从映射文件可以看出两个映射类之间的关系是多对一关系。

 

LCDS配置

使用LCDS 3.1数据管理属性 ,配置文件data-management-config加入两个destination

<destination id="echo2006i">

        <properties>

             <source>com.les.Gmap.GMapAssembler</source>

             <scope>application</scope>

             <item-class>com.les.Gmap.Map201105</item-class>

             <metadata>

                <identity property="id"/>

            </metadata>

           

             <network>

                <paging enabled="false" pageSize="10" />

            </network>

                           

                            <server>

                <fill-method>

                    <name>getOnArtist</name>

                    <params>java.lang.String,java.lang.Integer</params>

                </fill-method>

            </server>

                           

        </properties>

    </destination>

        

         <destination id="echo2006G">

        <properties>

             <source>com.les.Gmap.GMaplatlngAssembler</source>

             <scope>application</scope>

                             <item-class>com.les.Gmap.Maplatlng</item-class>

             <metadata>

                <identity property="id"/>

            </metadata>

           

             <network>

                <paging enabled="false" pageSize="10" />

            </network>

                           

                            <server>

                <fill-method>

                    <name>getOnArtist</name>

                    <params>java.lang.String,java.lang.Integer</params>

                </fill-method>

            </server>                           

        </properties>

</destination>

 

第一个destination提供点的信息,特别是坐标信息,第二个destination提供经纬度数据

 

Flex呈现

新建一个Flex手机项目,选定Android平台,选择“卡片式应用程序”,一个卡片用于呈现地图,另一个呈现数据。

呈现MapView

<?xml version="1.0" encoding="utf-8"?>

<components:View xmlns:fx="http://ns.adobe.com/mxml/2009"

                 xmlns:s="library://ns.adobe.com/flex/spark"

                 xmlns:components="spark.components.*"

                 xmlns:services="services.*"

                 xmlns:supportClasses="spark.skins.mobile.supportClasses.*"

                 creationComplete="application1_creationCompleteHandler(event)" title="Map">

    <fx:Declarations>

        <!-- 将非可视元素(例如服务、值对象)放在此处 -->

        <s:CallResponder id="getOnArtistResult"/>

        <services:Map201105Service id="map201105Service" result="listDataService_onselectresult(event)" fault="onfault(event)"/>

        <s:ArrayCollection id="wx"/>

    </fx:Declarations>

    <s:VGroup left="10" right="10" top="10" bottom="10">

        <s:HGroup id="HKBox" width="100%" height="5%">

            <s:Label id="menucomment" text="水韵尚都" width="20%" textAlign="center"/>

            <components:List id="combobox01" width="26%" height="48"

                    change="combobox01_changeHandler(event)"

                    dataProvider="{getOnArtistResult.lastResult}" labelField="jintouId"/>

            <s:TextInput id="textinput01" width="39%" text="输入建筑工地名称" color="#221B46"

                         fontSize="18" focusIn="textinput01_focusInHandler(event)"

                         focusOut="textinput01_focusOutHandler(event)"/>

           

            <s:Button id="button01" width="15%"  label="搜索" click="button01_clickHandler(event)"/>

        </s:HGroup>

        <s:HGroup id="HDBox" width="100%" height="100%">

        </s:HGroup>

    </s:VGroup>

    <fx:Script>

        <![CDATA[

            import com.google.maps.LatLng;

            import com.google.maps.Map;

            import com.google.maps.MapEvent;

            import com.google.maps.MapOptions;

            import com.google.maps.MapType;

            import com.google.maps.controls.PositionControl;

            import com.google.maps.controls.ScaleControl;

            import com.google.maps.controls.ZoomControl;

            import com.google.maps.overlays.Marker;

            import com.google.maps.overlays.MarkerOptions;

            import com.google.maps.styles.FillStyle;

            import com.google.maps.styles.StrokeStyle;

           

            import mx.events.FlexEvent;

            import mx.rpc.events.FaultEvent;

            import mx.rpc.events.ResultEvent;

           

            import spark.events.IndexChangeEvent;

           

            private var map:Map;

           

            private function onMapReady(event:Event):void {

               

                this.map.addControl(new PositionControl());

                this.map.addControl(new ZoomControl());

                this.map.addControl(new ScaleControl());

               

                for each (var _wx:Object in getOnArtistResult.lastResult){

                    //trace(_wx.jingdu);

                    CreateSign(_wx.jiancheng,_wx.kehumingcheng,_wx.jingdu,_wx.weidu);

                }

               

            }

           

            protected function map_mapevent_mappreinitializeHandler(event:MapEvent):void

            {

                var myMapOptions:MapOptions = new MapOptions();

                myMapOptions.zoom = 8;

                myMapOptions.center = new LatLng(23.0670,113.1370);

                myMapOptions.mapType = MapType.SATELLITE_MAP_TYPE;

                this.map.setInitOptions(myMapOptions);

            }

           

            private function CreateSign(_jiancheng:String,_kehumingcheng:String,_jingdu:Number,_weidu:Number):void {

                var markerA:Marker = new Marker(new LatLng(_jingdu,_weidu),

                    new MarkerOptions({strokeStyle: new StrokeStyle({thickness: 1,

                        color: 0xff8030,

                        alpha: 0.7,

                        pixelHinting: false}),

                        fillStyle: new FillStyle({color: 0x223344, alpha: 0.8}),

                        radius: 8,

                        tooltip: _jiancheng,

                        label:_kehumingcheng,

                        hasShadow: true}));

                this.map.addOverlay(markerA);

            }

           

            protected function application1_creationCompleteHandler(event:FlexEvent):void

            {

                getOnArtistResult.token =map201105Service.getOnArtist('中国金名都', 0);

            }

           

            private function listDataService_onselectresult(event:ResultEvent):void{

                wx=ArrayCollection(event.result);

                button01.enabled=true;

                menucomment.text=wx[0].jiancheng;

               

                map = new Map();

                map.key = "Google Map key";

                map.setSize(new Point(HDBox.width, HDBox.height));

                map.sensor="false";

                map.url="http://localhost";

                map.addEventListener(MapEvent.MAP_READY, onMapReady);

                map.addEventListener(MapEvent.MAP_PREINITIALIZE,map_mapevent_mappreinitializeHandler);

                HDBox.addElement(map);

            }

           

            //处理错误函数

            private function onfault(event:FaultEvent):void{

                trace(event.fault.faultString, 'Error');     

            }

           

            protected function button01_clickHandler(event:Event):void

            {

                // TODO Auto-generated method stub

                if (textinput01.text!=''){

                    trace(textinput01.text);

                    var str:String;

                    str=textinput01.text;

                    HDBox.removeElement(map);

                    getOnArtistResult.token =map201105Service.getOnArtist(str, 0);

                    button01.enabled=false;

                }

            }

           

           

            protected function textinput01_focusInHandler(event:FocusEvent):void

            {

                // TODO Auto-generated method stub

                if (event.target.text=='输入建筑工地名称'){

                    event.target.text='';                  

                }

            }

           

           

            protected function textinput01_focusOutHandler(event:FocusEvent):void

            {

                // TODO Auto-generated method stub

                if (event.target.text==''){

                    event.target.text='输入建筑工地名称';                  

                }

            }

           

            protected function textinput01_textinputHandle(event:TextEvent):void

            {

                //event.target.setStyle('color',0x10DAA2);

            }

           

           

            protected function combobox01_changeHandler(event:IndexChangeEvent):void

            {

                // TODO Auto-generated method stub

                trace(wx[event.newIndex].jintouId);

                var jingdu:Number;

                var weidu:Number;

                jingdu=wx[event.newIndex].jingdu;

                weidu=wx[event.newIndex].weidu;

                map.setCenter(new LatLng(jingdu,weidu));

                map.setZoom(13);

            }

           

        ]]>

    </fx:Script>

</components:View>

 

呈现数据的View

<?xml version="1.0" encoding="utf-8"?>

<components:View xmlns:fx="http://ns.adobe.com/mxml/2009"

                 xmlns:s="library://ns.adobe.com/flex/spark"

                 xmlns:components="spark.components.*"

                 xmlns:services="services.*"

                 title="主页视图">

    <fx:Script>

        <![CDATA[

            import mx.events.FlexEvent;

            import mx.rpc.events.ResultEvent;

           

            protected function myDG_creationCompleteHandler(event:FlexEvent):void

            {

                getOnArtistResult.token = maplatlngService.getOnArtist('中国南方家园5',0);

            }

           

            protected function textinput01_focusInHandler(event:FocusEvent):void

            {

                // TODO Auto-generated method stub

                if (event.target.text=='输入建筑工地名称'){

                    event.target.text='';                  

                }

            }

           

           

            protected function textinput01_focusOutHandler(event:FocusEvent):void

            {

                // TODO Auto-generated method stub

                if (event.target.text==''){

                    event.target.text='输入建筑工地名称';                  

                }

            }

           

            protected function button01_clickHandler(event:Event):void

            {

                // TODO Auto-generated method stub

                if (textinput01.text!=''){

                    var str:String;

                    str=textinput01.text;

                    getOnArtistResult.token = maplatlngService.getOnArtist(str,0);

                    button01.enabled=false;

                }

            }

           

            protected function maplatlngService_resultHandler(event:ResultEvent):void

            {

                // TODO Auto-generated method stub

                button01.enabled=true;

            }

           

        ]]>

    </fx:Script>

    <fx:Declarations>

        <s:CallResponder id="getOnArtistResult"/>

        <services:MaplatlngService id="maplatlngService" result="maplatlngService_resultHandler(event)"/>

        <!-- 将非可视元素(例如服务、值对象)放在此处 -->

    </fx:Declarations>

    <components:BorderContainer width="100%" height="100%">

        <s:VGroup width="100%" height="100%">

            <s:HGroup id="hgroup01" width="100%" height="10%">

                <s:TextInput id="textinput01" width="60%" height="100%" text="输入建筑工地名称"

                             textAlign="center" focusIn="textinput01_focusInHandler(event)" focusOut="textinput01_focusOutHandler(event)"/>

                <s:Button id="button01" width="40%" height="100%" label="搜索" click="button01_clickHandler(event)"/>

            </s:HGroup>

            <components:DataGrid id="myDG" width="100%" height="100%"

                                 creationComplete="myDG_creationCompleteHandler(event)">

                <components:columns>

                    <s:ArrayList>

                        <s:GridColumn dataField="id" headerText="镜头ID"></s:GridColumn>

                        <s:GridColumn dataField="map201105.jiancheng" headerText="简称"></s:GridColumn>

                        <s:GridColumn dataField="map201105.dvrtongdaohao" headerText="摄像机编号"></s:GridColumn>

                        <s:GridColumn dataField="latDu" headerText="纬度 度"></s:GridColumn>

                        <s:GridColumn dataField="latFen" headerText="纬度 分"></s:GridColumn>

                        <s:GridColumn dataField="latMiao" headerText="纬度 秒"></s:GridColumn>

                        <s:GridColumn dataField="lngDu" headerText="经度 度"></s:GridColumn>

                        <s:GridColumn dataField="lngFen" headerText="经度 分"></s:GridColumn>

                        <s:GridColumn dataField="lngMiao" headerText="经度 秒"></s:GridColumn>                      

                    </s:ArrayList>

                </components:columns>

                <s:AsyncListView list="{getOnArtistResult.lastResult}"/>

               

            </components:DataGrid>

        </s:VGroup>

    </components:BorderContainer>

</components:View>

 

 

结果:

Mapview

 

 

 

DataView

 

 

评价:

   Flex文件比较大,生成地图时间约10秒。

原创粉丝点击