Android:在不同的Activity之間進行數據的共享


  最近一直做一個項目,開始的時候需求中沒有涉及到主子表之間的關系,因為自己也是初學Android太多太多的無奈。需求基本上做完了,這下經理又開始讓我來完善自己項目中的不足,項目需求雖然沒有涉及到,但是說這只是這次需求沒有涉及到,這種業務指定會有的,無奈之下,開始完善需求。

  完善的時候遇到了一個這樣的問題,就是主Activity中有些值需要傳遞到別的Activity在子Activity中進行一些賦值操作之后然后再主表中進行一提交。(因為公司在做手機系統的時候考慮到手機系統要與平台進行融合,這樣傳輸的數據格式必須符合一定的格式。傳輸的時候是以XML個進行傳輸的,貼上一個格式代碼:

View Code
<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();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM