Saving Key-Value Sets Shared Preferences


Mình giới thiệu tới các bạn cách thức cho việc saving data in android.  Khi nào bạn sử dụng trường hợp này , nếu các bạn có 1 tập các data với 2 thuộc tính Key-Values thì các bạn nên nghỉ đến đối tượng SharedPreferences APIs. API này cung cấp cho chúng ta cách thức đọc và viết cặp Key-Value này 1 cách dễ dàng.

Source code : Download

Mình sẻ hướng dẫn các bạn làm thể nào để thiết lập 1 Preferences cho ứng dụng của mình.

Chuột phải vào project – > New – > New Android XML File và cấu hình như sau :

d1

Đây là file preferences.xml của mình. Có tạo 2 cặp key value là user và password như sau .

Note các bạn có thể thêm thuộc tính  android:inputType=”textPassword”  ở vị trí có key là pass.


<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<PreferenceCategory android:title="User Settings" >
 <EditTextPreference
 android:key="user"
 android:title="User Name" />
 <EditTextPreference
 android:key="pass"
 android:title="Password" />
 </PreferenceCategory>

</PreferenceScreen>

Chúng ta tạo ra 1 Activity SavingKeyValue.java extend PreferenceActivity thiết lập layout của activity này là file
preferences.xml của chúng tạo ở trên.

package com.thaihoanghai.data;

import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.view.Menu;

public class SavingKeyValue extends PreferenceActivity {

	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);		
		addPreferencesFromResource(R.xml.preferences);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_saving_key_value, menu);
		return true;
	}

}

Chúng ta đả xong phần resource cho file preferences.

Chúng ta tạo ra 1 class Main để run chương trình.

Layout activity_main.xml của chúng ta


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/LinearLayout1"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context=".MainActivity" >

<Button
 android:id="@+id/btnShow"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="Show My Preferences" />

<Button
 android:id="@+id/btnChange"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:text="Change Preferences" />

</LinearLayout>

 

Sau đây là class MainActivity.java của chúng ta.


package com.thaihoanghai.data;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity{
	private Button mShow, mChange;
	private SharedPreferences mPreferences;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mShow = (Button) findViewById(R.id.btnShow);
		mChange = (Button) findViewById(R.id.btnChange);
		// Initialize Preferences
		mPreferences = PreferenceManager.getDefaultSharedPreferences(this);

		// We will show 2 value with keys are user and pass when Button Show clicked
		mShow.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// get value from preferences
				String username = mPreferences.getString("user","no-name");
				String password = mPreferences.getString("pass", "no-pass");
				Toast.makeText(MainActivity.this, "UserName : " + username +" - Password : " + password,
						Toast.LENGTH_LONG).show();
			}
		});
		// We will change value have key is user . assign new value is Justina
		mChange.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {				
				Editor edit = mPreferences.edit();
				String userOld = mPreferences.getString("user", "no-name");
				String userNew = "Justina";
				edit.putString("user", userNew);
				edit.commit();
				Toast.makeText(MainActivity.this, "Change UserName from " + userOld + " ===> " + userNew, Toast.LENGTH_LONG).show();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		// Menu display screen PreferenceActivity to change value in your preferences
		case R.id.menu_prefereces:
			Intent i = new Intent(MainActivity.this, SavingKeyValue.class);
			startActivity(i);			
			break;
		}
		return true;
	}

}

Mình giải thích đôi chút về code ở phía trên. Chúng ta tạo ra 2 button .
Button Show Preferences sẻ thực hiện việc show giá trị hiện tại của file preferences của chúng ta.
Button Change Prefernces sẻ thực hiện việc thay đổi giá trị của 1 key xác định (Ở đây mình thay đổi key là user).
Các bạn chú ý đến 1 số method như sau :
1 – Khởi tạo Preferences với đối tượng PreferenceManager
// Initialize Preferences
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);

2 – Để lấy giá trị của 1 key chúng ta sẻ sữ dụng
mPreferences.get_Cái_Gì_Đó(“your key”,”giá trị defaul”);

3- Để thay đổi value với 1 key xác định chúng ta cần thực hiện
Editor edit = mPreferences.edit();
edit.put_Cái_gì_đó(“your key”, your value);
edit.commit()

Chúc các bạn thành công !!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: