最近一直做一個項目,開始的時候需求中沒有涉及到主子表之間的關系,因為自己也是初學Android太多太多的無奈。需求基本上做完了,這下經理又開始讓我來完善自己項目中的不足,項目需求雖然沒有涉及到,但是說這只是這次需求沒有涉及到,這種業務指定會有的,無奈之下,開始完善需求。
完善的時候遇到了一個這樣的問題,就是主Activity中有些值需要傳遞到別的Activity在子Activity中進行一些賦值操作之后然后再主表中進行一提交。(因為公司在做手機系統的時候考慮到手機系統要與平台進行融合,這樣傳輸的數據格式必須符合一定的格式。傳輸的時候是以XML個進行傳輸的,貼上一個格式代碼:

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> <NewDataSet> <UDOC_OTHERCOMPANY1 diffgr:id="UDOC_OTHERCOMPANY11" msdata:rowOrder="0" A="1" ID="6500000036500387158" C="111111" N="11111111" USRCODE="11111111" SHORTNAME="" CLSTATE="-1" EDUCATION="-1" EDUCATION_SYSCODE="" EDUCATION_USRNAME="" GENDER="0" GENDER_ENUM="男" IDNUMBER="" MARITALSTATUS="-1" RESIDENCEADDRESS="" AREAID="-1" AREAID_SYSCODE="" AREAID_USRNAME="" COMPANY="1000000000000000001" COMPANY_SYSCODE="C001" COMPANY_USRNAME="合肥中建集團" STATE="1" STATE_ENUM="有效客戶" INVALIDREASON="-1" INVALIDREASON_C="" INVALIDREASON_N="" EID="1000000000000000000" EID_SYSCODE="S001" EID_USRNAME="管理員" EDT="2012-05-22" LASTMODIFY="-1" LASTMODIFY_SYSCODE="" LASTMODIFY_USRNAME="" WAY="-1" WAY_C="" WAY_N="" WAYSUB="-1" WAYSUB_C="" WAYSUB_N="" STARTEDYEAR="-1" CLASSPID="-1" COMPLEVEL="-1" COMPLEVEL_C="" COMPLEVEL_N="" EMPID="-1" EMPID_SYSCODE="" EMPID_USRNAME="" VICESALEDIRECTOR="-1" VICESALEDIRECTOR_SYSCODE="" VICESALEDIRECTOR_USRNAME="" ORDERPOSSIBILITY="-1" ORDERPOSSIBILITY_C="" ORDERPOSSIBILITY_N="" BUYPOSSIBILITY="-1" BUYPOSSIBILITY_C="" BUYPOSSIBILITY_N="" IMPORTANCE="-1" IMPORTANCE_C="" IMPORTANCE_N="" HEAT="-1" INFOSIMPOSIBLE="-1" ORIG="-1" ORIG_SYSCODE="" ORIG_USRNAME="" MARK="-1" MARK_N="" MARK_C="" MOBILE="15965874562" PHONE="" FAX="" EMAIL="" QQ="" MOBILE2="" PHONE2="" FAX2="" MSN="" PROV="-1" PROV_C="" PROV_N="" CITYT="-1" CITYT_C="" CITYT_N="" TOWN="-1" TOWN_C="" TOWN_N="" COMPTYPE="" TYPE="11" TYPE_ENUM="普通客戶" DELIVERMODE="-1" DELIVERMODE_C="" DELIVERMODE_N="" SHORTCODE="" DEPTID="1000000000000000001" DEPTID_SYSCODE="C001" DEPTID_USRNAME="合肥中建集團" COMPCODE="C001/" SHIPLEADTIME="0" INVOICETYPE="0" INVOICETYPE_ENUM="增值稅專用發票" CTYPE="0" CTYPE_ENUM="個人" SHIPID="-1" SHIPID_C="" SHIPID_N="" MAPCOMP="-1" MAPCOMP_C="" MAPCOMP_N="" PARENTID="-1" PARENTID_C="" PARENTID_N="" HEATEXPLAIN="" SCOPE="-1" SCOPE_USRNAME="" SCOPE_SYSCODE="" STATUS="-1" MERIT="-1" CONLEVEL="-1" SELLLIST="-1" SELLLIST_C="" SELLLIST_N="" FRCLSTATE="-1" FRCLSTATE_C="" FRCLSTATE_N="" LACREATEDATE="2012-05-22" EMPCOUNT="0" YTURNOVER="0" REGADDRESS="" RECADDR="" CORPORATION="" CORPPHONE="" TRADETYPE="0" TRADETYPE_ENUM="內銷" DEALRANGE="" LICENSENUM="" TAXREGNUM="" TAXR="17" NATION="-1" NATION_C="" NATION_N="" POSTCODE="" LINKMANID="-1" LINKMANID_C="" LINKMANID_N="" CORPADDRESS="" LINKPOSTCODE="" WEBSITE="" IS_COMMAN_TAXPAYER="false" MM="" PRICECLASS="-1" PRICECLASS_C="" PRICECLASS_N="" ISCREDIT="false" CREDITAMT="0" CREDITLEVEL="" ISMONTHCLOSE="false" ENTRUSTSTRHID="-1" ENTRUSTSTRHID_C="" ENTRUSTSTRHID_N="" BUSINESSTYPE="0" BUSINESSTYPE_ENUM="普通銷售" PAYTERMID="" ISPLANT="false" PAYMODE="-1" PAYMODE_STLTYPECODE="" PAYMODE_STLTYPENAME="" CURR="0" CURR_SYSCODE="" CURR_USRNAME="" PAYUPDATE="0" SENDADDR="" LASTPURAMT="0" LASTDEALAMT="0" MAXPURAMT="0" TOTALNETAMT="0" BALANCE="0" BOUNCINGCOUNT="0" RID="1000000000000000000" RID_SYSCODE="S001" RID_USRNAME="管理員" RDT="2012-05-22" CONTACT="-1" BOOLEMAIL="-1" BOOLNOTE="-1" SHARELIST="-1" CLASSPID_C="" CLASSPID_N="" SERVICEDIRECTOR="-1" SERVICEDIRECTOR_SYSCODE="" SERVICEDIRECTOR_USRNAME="" SERVICEVICEDIRECTOR="-1" SERVICEVICEDIRECTOR_SYSCODE="" SERVICEVICEDIRECTOR_USRNAME="" PROVINCE1="-1" PROVINCE1_C="" PROVINCE1_N="" CITY1="-1" CITY1_C="" CITY1_N="" COUNTY1="-1" COUNTY1_C="" COUNTY1_N="" TOWN1="" ADDRESS1="" ZIPCODE1="" PROVINCE2="-1" PROVINCE2_C="" PROVINCE2_N="" CITY2="-1" CITY2_C="" CITY2_N="" COUNTY2="-1" COUNTY2_C="" COUNTY2_N="" TOWN2="" ADDRESS2="" ZIPCODE2="" PROVINCE3="-1" PROVINCE3_C="" PROVINCE3_N="" CITY3="-1" CITY3_C="" CITY3_N="" COUNTY3="-1" COUNTY3_C="" COUNTY3_N="" TOWN3="" ADDRESS3="" ZIPCODE3="" PROVINCE4="-1" PROVINCE4_C="" PROVINCE4_N="" CITY4="-1" CITY4_C="" CITY4_N="" COUNTY4="-1" COUNTY4_C="" COUNTY4_N="" TOWN4="" ADDRESS4="" ZIPCODE4="" DISTRIBUTORALIAS="" DISTRIBUTOR="" HISID="" COMPCLASSID="-1" COMPCLASSID_C="" COMPCLASSID_N="" INFOPERSON="-1" INFOPERSON_C="" INFOPERSON_N="" INFOPERSONMOBILE="" BRANCH="-1" BRANCH_SYSCODE="" BRANCH_USRNAME="" SALEDEPT="-1" SALEDEPT_SYSCODE="" SALEDEPT_USRNAME="" MARKETINGCENTER="-1" MARKETINGCENTER_SYSCODE="" MARKETINGCENTER_USRNAME=""/> <UDOC_OTHERCOMPANYLINK diffgr:id="UDOC_OTHERCOMPANYLINK1" msdata:rowOrder="0" A="1" ID="6500000036500387159" ISLINK="0" LINKMAN="" C="111111" N="111111" SEX="1" SEX_ENUM="男" DEPT="" FAX="" EMAIL="" POSTCODE="" CORPADDRESS="" ADDRESS="" INFO="" ROLE="" PHONE="" MOBILE="" MM="" MID="6500000036500387158" TITLE="" MARRSTATE="-1" CLIENT="6500000036500387158" CLIENT_C="111111" CLIENT_N="11111111" PRIN="-1" PRIN_SYSCODE="" PRIN_USRNAME="" PRDEPT="-1" PRDEPT_SYSCODE="" PRDEPT_USRNAME="" IMPORTANCE="-1" CONTACTNOTE="" NEXUSLEVEL="-1" SUPERIOR="0" SUPERIOR_C="" SUPERIOR_N="" PURROLE="-1" HOMEPHONE="" MSN="" QQ="" BOOLEMAIL="1" BOOLEMAIL_ENUM="否" BOOLNOTE="1" BOOLNOTE_ENUM="否" EID="1000000000000000000" EID_SYSCODE="S001" EID_USRNAME="管理員" CREATEDATE="2012-05-22" CUSRELATION="-1" CUSRELATION_C="" CUSRELATION_N="" LINKMANID_N="1111111"/> </NewDataSet> </diffgr:diffgram>
)
必須生成這種格式的數據平台才能保存成功,這樣在界面生成之后進行了數據錄入了之后,就得生成這種格式的xml,解釋下XML “UDOC_OTHERCOMPANY1”是主表的數據(這個數據需要在MainActivity中進行生成)“UDOC_OTHERCOMPANYLINK ”這個則是子表的值,可能是多個這樣的節點,也就是子表可能是多條數據(這個數據需要在子表的Activity中進行賦值生成),考慮到這我想到的是程序中需要有個一個變量在這個兩個或是多個Activity中進行共享,行到這里我想到了兩個解決方法:
一,在MainActivity中聲明一個公共的static變量,在子Activity中可以訪問MainActivity該變量(共享的這個變量是一個DOM對象)。
代碼:
public class TwoActivityShareDataActivity extends Activity { /** Called when the activity is first created. */ public static TwoActivityShareDataActivity instance = null;//聲明的變量 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); instance = this;//變量賦值 } }
//第二個Activity中進行訪問
public class SecondActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TwoActivityShareDataActivity.instance.document= "Do Something"; finish(); } }
方法2:通過Application Context進行變量共享
首先,建立一個繼承自Application的類,將要共享的變量在其中聲明:
代碼:
import android.app.Application; public class ApplicationTrans extends Application { private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
注意:需要注意的是,寫完這個類之后需要在AndroidManifest.xml中在Application節點中進行設置
<application android:name=".ApplicationTrans"//必須設置 android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".TwoActivityShareDataActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SecondActivity" > </activity> </application>
接下來在MainActivity中進行操作:
((ApplicationTrans) getApplication()).setValue("我是通過Application傳遞的值");//賦值操作
在第二個Activity中獲得該值:就行用這個值進行操作了
((ApplicationTrans) getApplication()).getValue();