Sharepreferences trong android

Danh mục: Android
 

Sharepreferences là một Interface trong android giúp chúng ta có thể lưu và truy xuất dữ liệu một cách dễ dàng. Thực tế dữ liệu được lưu dưới dạng file xml với “tag” và “value”. Thông thường Sharepreferences được sử dụng rất nhiều để lưu cấu hình, lưu highscore, lưu user pass và trạng thái remmember khi login mà các bạn đã thấy rất nhiều…

Để các bạn có thể hiểu rõ về vấn đề này mình làm một ứng dụng đơn giản để lưu lại hướng màn hình, lưu lại trạng thái checkbox, khi checkbox được check thì edittext user và pass sẽ được set giá trị được remember trong file

Để làm được app này các bạn có thể thực hiện theo các sau

Bước 1: mở file res->values-> Strings.xml

<?xml version="1.0" encoding="utf-8"?>



<resources>



<string name="app_name">PreferenceDemo</string>

 <string name="action_settings">Settings</string>

 <string name="hello_world">Hello world!</string>

 <string name="Remember">Remember</string>

 <string name="user">user</string>

 <string name="pass">pass</string>

 <string name="Config">Config</string>

 <string name="huong">nhap huong man hinh</string>



</resources>

Bước 2: mở file res->layout-> layout_mainactivity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"



xmlns:tools="http://schemas.android.com/tools"

 android:layout_width="match_parent"

 android:layout_height="match_parent"

 android:orientation="vertical"

 tools:context=".MainActivity" >



<EditText

 android:id="@+id/etNumber"

 android:layout_width="fill_parent"

 android:layout_height="wrap_content"

 android:hint="@string/huong"

 android:inputType="numberDecimal" />



<Button

 android:id="@+id/btConfig"

 android:layout_width="wrap_content"

 android:layout_height="wrap_content"

 android:layout_gravity="center_horizontal"

 android:text="@string/Config" />



<EditText

 android:id="@+id/etUser"

 android:layout_width="fill_parent"

 android:layout_height="wrap_content"

 android:hint="@string/user" />

 <EditText

 android:id="@+id/etPass"

 android:inputType="textPassword"

 android:layout_width="fill_parent"

 android:layout_height="wrap_content"

 android:hint="@string/pass" />



<CheckBox

 android:id="@+id/cbRemember"

 android:layout_width="wrap_content"

 android:layout_height="wrap_content"

 android:text="@string/Remember" />



</LinearLayout>

Bước 3 tạo class Constant.java trong packet com.example.preferencedemo

package com.example.preferencedemo;



public class Constant {

 public static final String REMEMBER = "REMEMBER";

 public static final String ORIENTATION = "ORIENTATION";

 public static final String USER = "USER";

 public static final String PASS = "PASS";

 public static final String MyNameFileFre = "MyPrefer";



}

Bước 4 tạo file PreferenceUtil.java trong packet com.example.preferencedemo

package com.example.preferencedemo;



import android.content.Context;

import android.content.SharedPreferences;

import android.preference.PreferenceManager;



public class PreferenceUtil {

 private SharedPreferences preferences;



// xay dung phuong thuc khoi tao file preferrences mac dinh

 public PreferenceUtil(Context mContext) {

 preferences = PreferenceManager.getDefaultSharedPreferences(mContext);

 }



// khoi tao file preference co ten la name

 public PreferenceUtil(Context mContext, String name) {

 preferences = mContext.getSharedPreferences(name, Context.MODE_PRIVATE);

 }



// Xay dung cac phuong thuc set get cac gia tri duoc luu trong file XML

 // xay dung phuong thuc set get cho orientation

 public void setOrientation(int orientation) {

 preferences.edit().putInt(Constant.ORIENTATION, orientation).commit();

 }



public int getOrientation() {

 return preferences.getInt(Constant.ORIENTATION, 0);

 }



// xay dung phuong thuc set get cho Remember



public void setRemember(int remember) {



// Editor myEditor = preferences.edit();

 // myEditor.putInt(Constant.REMEMBER, remember);

 // myEditor.commit();



preferences.edit().putInt(Constant.REMEMBER, remember).commit();

 }



public int getRemember() {

 return preferences.getInt(Constant.REMEMBER, 0);

 }



// xay dung phuong thuc set get cho USER



public void setUser(String mUser) {

 preferences.edit().putString(Constant.USER, mUser).commit();



}



public String getUser() {

 return preferences.getString(Constant.USER, "");

 }



// xay dung phuong thuc set get cho PASS



public void setPASS(String mPASS) {

 preferences.edit().putString(Constant.PASS, mPASS).commit();



}



public String getPASS() {

 return preferences.getString(Constant.PASS, "");

 }

}

Bước 5 mở file MainActivity.java

package com.example.preferencedemo;



import android.app.Activity;

import android.content.pm.ActivityInfo;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.CompoundButton;

import android.widget.CompoundButton.OnCheckedChangeListener;

import android.widget.EditText;



public class MainActivity extends Activity {



private PreferenceUtil pu;

 private PreferenceUtil puName;

 private EditText et;

 private Button bt;

 private CheckBox cb;

 private EditText etUser,etPass;



@Override

 protected void onCreate(Bundle savedInstanceState) {

 super.onCreate(savedInstanceState);

 setContentView(R.layout.activity_main);

 // trong vi du nay minh huong dan cac ban 2 cach lam viec voi Preference

 // dung file mac dinh pu

 pu = new PreferenceUtil(this);



 // dung file co ten file Constant.MyNameFileFre = MyPrefer

 puName = new PreferenceUtil(this, Constant.MyNameFileFre);



 // link den layout de dieu khien

 et = (EditText) findViewById(R.id.etNumber);

 bt = (Button) findViewById(R.id.btConfig);

 etUser = (EditText) findViewById(R.id.etUser);

 etPass = (EditText) findViewById(R.id.etPass);

 cb = (CheckBox) findViewById(R.id.cbRemember);



// bat su kien click vao button config

 bt.setOnClickListener(new OnClickListener() {



@Override

 public void onClick(View arg0) {

 // trong vi du nay de don gian minh lam 1 editext de cac ban nhap so

 // neu cac ban nhap 0 la huong theo sensor ; 1 la huong thang dung; 2 la huong ngang

 String str = et.getText().toString();

 if (!str.equals("")) {

 // ghi gia tri huong man hinh xuong file preference

 pu.setOrientation(Integer.parseInt(str));

 // set huong cho man hinh theo gia tri trong file preference

 setOrientation(pu.getOrientation());

 }

 }

 });



// luu lai gia tri cua user va pass neu cb Remember duoc check tuong tu yahoo, facebook

 cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {



@Override

 public void onCheckedChanged(CompoundButton buttonView,

 boolean isChecked) {

 // TODO Auto-generated method stub

 if (isChecked) {

 // neu checkbox duoc check thi luu gia tri remember =1

 // luu user va pass xuong file preference

 pu.setRemember(1);

 puName.setRemember(1);

 String user = etUser.getText().toString();

 pu.setUser(user);

 String pass = etPass.getText().toString();

 pu.setPASS(pass);

 Log.d("debug", "Remember");

 } else {

 // neu checkbox khong dc check thi set gia tri remember =0

 pu.setRemember(0);

 puName.setRemember(0);

 Log.d("debug", "Don't Remember");

 }

 ;

 }

 });



}

 @Override

 protected void onResume() {

 // TODO Auto-generated method stub

 super.onResume();



 // khoi tao huong cho man hinh moi khi activity duoc chay

 // viec set huong nay cac ban co the thay rat nhieu trong cac game

 // hoac cac app co huong man hinh mac dinh theo setting cua nguoi dung

 setOrientation(pu.getOrientation());



 // get lai gia tri remmember

 int i = pu.getRemember();

 if (i == 0) {

 // don't remember user + pass

 Log.d("debug", "don't remember");

 // set gia tri cho checkbox la false( not check)

 cb.setChecked(false);

 } else {

 // neu co remember user + pass thi set gia tri user + pass cho edittext va set gia tri cho checkbox = true (isCheck)

 String user = pu.getUser();

 etUser.setText(user);

 etPass.setText(pu.getPASS());

 cb.setChecked(true);

 Log.d("debug", "User "+ user+" Pass "+ pu.getPASS());

 }

 }

 private void setOrientation(int orientation) {

 // phuong thuc nay de set huong cho man hinh



 switch (orientation) {

 case 0:

 // set huong cua man hinh theo cam bien

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

 break;

 case 1:

 // set huong cua man hinh la huong thang dung

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

 break;

 case 2:

 // set huong cua man hinh la huong ngang

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

 break;



default:

 // mac dinh de huong man hinh la thang dung

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

 break;

 }

 }



@Override

 public boolean onCreateOptionsMenu(Menu menu) {

 // Inflate the menu; this adds items to the action bar if it is present.

 getMenuInflater().inflate(R.menu.main, menu);

 return true;

 }



}

Các bạn có thể xem file sharepreference theo link:

chọn DDMS -> File Exprolrer -> data -> data -> <packet – name> (như hình dưới)

Sharepreferences, thu thuat android, android tips, android co ban, android

Sharepreferences, thu thuat android, android tips, android co ban, android

Cấu trúc file sharePreferences có dạng như hình dưới

Sharepreferences, thu thuat android, android tips, android co ban, android

Sharepreferences, thu thuat android, android tips, android co ban, android

Note:Các bn có th theo dõi kết qu thc hin chương trình trên logcat và màn hình. Các bn có th thoát app và vào li các bn s thy các cu hình s ging như trước khi bn out ra khi app. Khi làm theo ví d các bn có gì không hiu có th đ li câu hi trên web mình s tr li các bn mt cách nhanh nht có th. Các bn có th down full src theo link dưới đây

PreferenceDemo

Kết quả thực hiện chương trình

Sharepreferences, thu thuat android, android tips, android co ban, android

Sharepreferences, thu thuat android, android tips, android co ban, android

 



BÀI VIẾT KHÁC
CODE GỢI Ý CHO BẠN
BÌNH LUẬN

BẢN QUYỀN ®
Mọi chia sẻ nội dung thuộc tác quyền của MANGUON.COM phải ghi rõ "Nguồn MANGUON.COM"