Android學習劄記二:資料存放區之SharedPreferences

來源:互聯網
上載者:User

android中的資料存放區方式多種,本機存放區方式目前總結起來有:(1)通過file儲存,即把資料儲存在檔案中。(2)SQLite儲存,android上的一個微型資料庫,雖小,但樣樣俱全。(3)SharedPreferences儲存,其實我認為這種方式和第一種儲存方式一樣,只不過這種儲存的資料是處理為xml資料存放在裝置中。等等...

今天談談SharedPreferences的資料存放區的執行個體實現。

假設有需求:一個應用程式需要對註冊使用者的姓名、年齡、性別進行儲存,書寫程式通過SharedPreferences完成實現。

好,先定義UI

,這個簡單的demo操作流程:點擊“儲存”按鈕,姓名、年齡、性別將被儲存,點擊“提取”,被儲存的資訊將會被提取並顯示在按鈕下方,在UI的實現上見xml

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ><br /> <RelativeLayout<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"></p><p><TextView<br />android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:text="@string/name"<br /> android:textSize="30px"<br /> android:id="@+id/tv_name"<br /> /><br /><EditText<br />android:layout_width="200px"<br /> android:layout_height="wrap_content"<br /> android:layout_toRightOf="@id/tv_name"<br /> android:layout_alignTop="@id/tv_name"<br /> android:layout_marginLeft="10px"<br /> android:id="@+id/et_name"<br /> /><br /> </RelativeLayout></p><p><RelativeLayout<br />android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"><br /><TextView<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:text="@string/age"<br /> android:textSize="30px"<br /> android:id="@+id/tv_age"<br /> /><br /><EditText<br />android:layout_width="200px"<br /> android:layout_height="wrap_content"<br /> android:layout_toRightOf="@id/tv_age"<br /> android:layout_alignTop="@id/tv_age"<br /> android:layout_marginLeft="10px"<br /> android:inputType="number"<br /> android:id="@+id/et_age"<br /> /><br /></RelativeLayout> </p><p> <RelativeLayout<br />android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"><br /><TextView<br /> android:layout_width="wrap_content"<br /> android:layout_height="wrap_content"<br /> android:text="@string/sex"<br /> android:textSize="30px"<br /> android:id="@+id/tv_sex"<br /> /><br /><EditText<br />android:layout_width="200px"<br /> android:layout_height="wrap_content"<br /> android:layout_toRightOf="@id/tv_sex"<br /> android:layout_alignTop="@id/tv_sex"<br /> android:layout_marginLeft="10px"<br /> android:id="@+id/et_sex"<br /> /><br /></RelativeLayout> </p><p><RelativeLayout<br />android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"></p><p><Button<br />android:layout_width="wrap_content"<br />android:layout_height="wrap_content"<br />android:text="@string/save"<br />android:id="@+id/btn_sava"<br />/><br /><Button<br />android:layout_width="wrap_content"<br />android:layout_height="wrap_content"<br />android:layout_toRightOf="@id/btn_sava"<br />android:layout_alignTop="@id/btn_sava"<br />android:text="@string/take"<br />android:id="@+id/btn_take"<br />/><br /></RelativeLayout></p><p><TextView<br />android:layout_width="fill_parent"<br />android:layout_height="wrap_content"<br />android:id="@+id/tv_result"<br />/></p><p></LinearLayout>

很簡單的實現,線性布局嵌套關係布局,考慮到本地化的問題,當然少不了string.xml檔案,這個會在這個demo程式包中,

那麼主要的就是看看這個activity如何參考實現,

package com.app;</p><p>import android.app.Activity;<br />import android.content.Context;<br />import android.content.SharedPreferences;<br />import android.content.SharedPreferences.Editor;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;<br />import android.widget.EditText;<br />import android.widget.TextView;<br />import android.widget.Toast;</p><p>public class ActivityMain extends Activity {</p><p>private EditText etName;<br />private EditText etAge;<br />private EditText etSex;</p><p>private Button btnSave;<br />private Button btnTake;</p><p>private TextView tvResult;</p><p> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);</p><p> etName = (EditText)this.findViewById(R.id.et_name);<br /> etAge = (EditText)this.findViewById(R.id.et_age);<br /> etSex = (EditText)this.findViewById(R.id.et_sex);</p><p> btnSave = (Button)this.findViewById(R.id.btn_sava);<br /> btnTake = (Button)this.findViewById(R.id.btn_take);<br /> tvResult = (TextView)this.findViewById(R.id.tv_result);</p><p> btnSave.setOnClickListener(new OnClickListener() {<br />@Override<br />public void onClick(View v) {<br />String strName = etName.getText().toString();<br />String strAge = etAge.getText().toString();<br />String strSex = etSex.getText().toString();</p><p>//建立SharedPreferences執行個體<br />SharedPreferences sp = ActivityMain.this.getSharedPreferences("soft", Context.MODE_PRIVATE);<br />//建立編輯器editor,通過編輯器把資料存放到sp中<br />Editor editor = sp.edit();<br />editor.putString("name", strName);<br />editor.putString("age", strAge);<br />editor.putString("sex", strSex);<br />editor.commit();//提交變更<br />Toast.makeText(ActivityMain.this, R.string.toast_saveSuccee, 1).show();<br />}<br />});</p><p> btnTake.setOnClickListener(new OnClickListener() {<br />@Override<br />public void onClick(View v) {<br />//建立Sharedpreferences執行個體<br />SharedPreferences sp = ActivityMain.this.getSharedPreferences("soft", Context.MODE_PRIVATE);<br />//提取資料時可以直接通過sp提取資料,這一點和添加資料時不同<br />String name = sp.getString("name", "");<br />String age = sp.getString("age", "");<br />String sex = sp.getString("sex", "");</p><p>tvResult.setText("姓名:" + name +"/n年齡:" + age + "/n性別:" + sex);<br />}<br />});</p><p> }<br />}

代碼不長,但實用性很高,呵呵,那麼這裡需要指出兩點需要注意的地方,第一:建立SharedPreferences執行個體時,本段代碼是通過SharedPreferences sp = ActivityMain.this.getSharedPreferences("soft", Context.MODE_PRIVATE); 這種方法實現的,那還有另一種方法,即SharedPreferences sp = ActivityMain.this.getPreferences(Context.MODE_PRIVATE);<br />

區別在哪?前一種建立時,會指定檔案名稱soft,那後一種沒有“soft”,就是沒有檔案名稱了?當然不是,這時,它會採用所在的類名作為預設檔案名稱。 第二:SharedPreferences的執行個體不可以直接向檔案中set或put資料,必須通過Editor才能完成資料錄入工作,怪異的是,取資料時竟可直接通過SharedPreferences的執行個體進行get資料,同時,這裡需要注意一個資料存放區類型問題,這個demo中的儲存資料類型都為String,所以put或get時它們的資料類型務必都是String。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.