Android資料共用

來源:互聯網
上載者:User

標籤:

Android資料共用

 

         在Android應用程式開發的過程中,藉助Bundle類對象來傳遞資料並不是在所有情境下都適用,就那簡單的Intent類對象來說,就不能put進Bundle類對象中。當然不能否認,用Intent類對象來開啟另一個Activity或者Service,並利用Bundle類對象來攜帶資料是個不錯的形式,而且用途非常廣泛,但不是萬能的。

         關於在程式中共用資料,方法有很多,下面來看看到底有哪些是比較常用,哪些又是比較符合物件導向和高效、安全的。

  1、SharedPerferences

  首先來看在同一個Moudle中的兩個檔案(Activity介面)之間進行資料的共用。在分享資料的主類MainActivity的重載方法onCreate()中添加以下代碼。

1 SharedPreferences shareData = getSharedPreferences("shared_data",MODE_WORLD_WRITEABLE);2 SharedPreferences.Editor se = shareData.edit();3 se.putString("shared_data1", "Hello World");4 se.commit();5 Intent intent = new Intent(MainActivity.this,GetData.class);6 startActivity(intent);

  可以看到,在擷取共用對象時指定了此次進行的共用標示("shared_data")與模式(MODE_WORLD_WRITEABLE),這個非常重要,前者作為其他地方構建共用對象的唯一標示,後者作為決定當前共用對象的讀寫入模式。後面的Editor類對象主要完成了向共用對象中載入需要共用的資料,是以Key-Value的形式,這裡只載入了一對資料(”shared_data1”-”Hello World”,Value的類型任意)。最後調用commit()方法進行提交後,在另外的Activity中即可進行共用資料的提取了。

  下面給出擷取資料類GetData的onCreate()方法中做了哪些事。

1 SharedPreferences shareData = getSharedPreferences("shared_data",MODE_WORLD_READABLE);2 getData = (TextView)findViewById(R.id.get_data);3 getData.setText("shared_data1 = +shareData.getString("shared_data1", "default"));

  很簡單,利用共用對象直接調用getString()方法就可以通過Key來擷取Value。

  但是問題來了,SharedPreferences.Editor類對象在載入資料時和Bundle類似,也是通過putType(Key, TypeValue )的形式,如果Type為Intent還是無能為力。

  2、Bundle

  Bundle類是結合Intent類一起使用的,下面給出簡單的例子。啟動另一個Avtivity時設定Bundle類對象。

1 Bundle bundle = new Bundle();2 bundle.putString("Key", “Value”);3 Intent intent = new Intent(MainActivity.this, OtherActivity.class);4 intent.putExtras(bundle);5 startActivity(intent);

         在OtherActivity類中擷取資料:

1 Bundle bundle = this.getIntent().getExtras();2 String value = bundle.getString("Key");

  3、封裝

  將共用資料的聲明完全和使用檔案分開,將耦合度降到最低,方法是將需要共用的資料全部聲明在專門的一個類中。本來打算給出全部資料變數聲明為靜態變數的類中,考慮到和接下來將要給出的形式類似,而且從專業和安全性的角度不如後者,所以略過了。繼承Application類來聲明共用資料,並提供設定和提取資料的介面。

1 public class ShareData extends Application { 2     private int shareData1; 3     public int getData1() { 4         return shareData1; 5     } 6     public void setData1 (int shareData1) { 7         this. shareData1 = shareData1; 8     } 9 } 

         如果有多個資料,那麼相應的設定和提取方法也要實現多個,有興趣的小夥伴可以採用泛型的複用寫出更加簡潔的代碼。注意,類SharedData中的方法(目標是資料)在整個工程的類中都是可以訪問的,方法如下。

1 int shareData1 = ((ShareData)getApplicationContext()).getData1();

         那麼重點來了,如果在類中聲明一個Intent類的對象,很幸運的是用法和int型相同,那麼就解決了其在不同檔案之間的共用問題。之所以總是以Intent類對象來說事,是因為在某些情況下確實需要用到這個方法。如在繼承Service類的子類中是不能直接利用startActivityForResult()方法的,自然就不會有重載onActivityResult()方法的機會,但是又要在該子類中利用onActivityResult()方法返回的Intent類對象。現在好了,可以將需要開啟的Activity放在可以重載onActivityResult()方法的類(比如主類)中去實現,同時將返回的Intent對象賦給ShareData類中Intent類對象,然後,就OK了。

Android資料共用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.