Bài 1: Shared Preferences trong android

Đây là bài đầu tiên về series lập trình android nâng cao sau khi mình đã hoàn thành xong loạt video căn bản tại blog của mình, mình không biết nên bắt đầu từ đâu cả vì kiến thức nâng cao nó sẽ không theo một quy trình nào cả các bạn.

Tất cả nó không hẳn liên quan tới nhau giống như phần căn bản chính vì thế mình cũng không biết sắp xếp ra làm sao cho hợp lí tuy nhiên mình sẽ cố gắng cung cấp hết những cái cần thiết để các bạn học và đi xin việc sau này.

Bài đầu tiên hôm nay chúng ta sẽ đi tìm hiểu về các cách lưu dữ liệu trên android nhé.

Trong lập trình android thì sẽ có tổng 5 cách để các bạn đọc, viết dữ liệu đó là:

  • Shared Preferences
  • Internal Storage
  • External Storage
  • SQLite Database
  • Network Connection

Chi tiết hơn: https://developer.android.com/guide/topics/data/data-storage.html

Tổng là 5 cách đó các bạn, tuy nhiên cách thứ 5 thì trong loạt series này mình không hướng dẫn vì nó chẳng có gì cả ngoài chỉ là lưu dữ liệu lên server thôi.

Chúng ta sẽ học hết 4 cách lưu dữ liệu ở trong loạt series này, và bài đầu tiên chúng ta học là đọc và lưu dữ liệu với Shared Preferences, đây là gì và các lưu nó như thế nào thì mình cùng xem qua bài viết này nhé:

Shared Preferences trong android là gì?

Đây là một class Interface cho phép bạn lưu trữ và đọc dữ liệu với  bằng các cặp key và value và nó được lưu dưới dạng một file xml, dữ liệu nó có thể lưu là ở dạng nguyên thuỷ như: int, float, string, boolean, long. Dữ liệu của Shared Preferences sẽ được lưu ở trong ứng dụng android luôn chính vì thế nếu các bạn xoá ứng dụng đi hoặc là xoá dữ liệu app thì dữ liệu này sẽ hoàn toàn bị biến mất.

Vậy nhiều người sẽ hỏi Shared Preferences có lưu được Oject không thì câu trả lời là không nhé? Tuy nhiên sẽ có cách để chúng ta lưu đó là chuyển nó qua kiểu String rồi save lại bằng thư viện GSON, và cái này mình sẽ hướng dẫn sau cho các bạn nhé.

Shared Preferences được dùng khi nào?

Một hạn chế của thằng này đó là thường để lưu dữ liệu nhỏ, ít và đơn lẽ thôi.Mình sẽ cho một số ví dụ cho các bạn thấy ngay sau đây:

Bạn chơi Game thì thường sẽ có mục High Score (điểm cao) bạn bao giờ thắc mắc nó lưu ở đâu không? Chính là dùng Shared Prenferenes để lưu trữ đó các bạn, không tin hãy thử xoá dữ liệu của app mà không xoá app thì có bị mất không?

Hoặc là một số ứng dụng khi lần đầu tiên mở chạy bạn sẽ thấy có intro gì đó hướng dẫn sử dụng hay chơi game khi các bạn vào app lần 2 sẽ không thấy nữa. thì nó cũng dùng Shared Prenferences để lưu đó.

Tại sao phải sử dụng Shared Preferences

Bởi vì sẽ có những dữ liệu nhỏ bắt buộc bạn phải lưu nó trong toàn bộ vòng đời của một ứng dụng, bạn không thể lưu điểm High Score một trò chơi ở database được vì nó quá ít và không cần thiết, bạn không thể lưu ở bộ nhớ trong hay ngoài được vì nó sẽ dễ bị mất mát dữ liệu.

Chính vì thế Shared Prenferences đã ra đời để khắc phục, tuy nhiên đây là ý kiến cá nhân mình thôi nhé. hè hè.

Cách sử dụng Shared Preferences

Vậy thì cách sử dụng nó ra sao thì chúng ta cùng đi phân tích các cú pháp sau đây:

1.Cách lưu dữ liệu xuống Shared Prenferences

Bước 1:

Đầu tiên, để lưu dữ liệu xuống thì bạn sẽ khởi tạo một đối tượng (biến) thuộc kiểu Shared Preferences, với cú pháp như sau:


Với:

SHARED_PREFERENCES_NAME: là tên của file Shared Preferences, bạn sẽ lưu xuống thiết bị và nơi lưu file này chính là thư mục:


Ở đây shared_preferences_name chính là cái tên bạn lưu ở trên nhé các bạn.

Context.MODE_PRIVATE: đây là một chế độ bảo mật dữ liêu trong android, khi bạn để như vậy có nghĩa là bạn chỉ cho ứng dụng hiện tại truy cập vào file Shared Preferences này thôi mà không một ứng dụng nào có quyền truy cập vào được.

Bước 2:

Tạo đối tượng Editer từ biến sharedPreferences chúng ta đã tạo ở trên, mục đích của thằng này là để chúng ta có thể mở file shared_preferences_name.xml ra và đưa dữ liệu vào, cú pháp như sau:


Vậy sao khi mở được rồi, để đưa dữ liệu vào chúng ta sẽ làm viết như sau:

editor.putX(String key,value), trong đó:

X: là kiểu dữ liệu bạn đưa vào, với Shared Preferences bạn có thể lưu ở nhưng kiểu dữ liệu như : float, string, int, boolean, long.

key: là tên đặt cho biến bạn sẽ lưu xuống, ví dụ bạn muốn lưu điểm High Score nào đó xuống thì bạn sẽ đặt là “high_score” chẳng hạn.

value: giá trị bạn sẽ lưu vào biến (là tên của key ở trên).

Ví dụ chi tiết như sau:


Sau khi đã put dữ liệu xong thì bạn sẽ gọi hàm commit() hoặc là apply() để xác nhận những thay đổi, thì khi bạn gọi 2 phương thức này thì nó mới lưu xuống được ổ đĩa nhé, ở đây là cái đường dẫn mình đã ghi ở trên.

Vậy sự khác nhau giữa commit()apply() là gì bởi vì cả 2 để dùng để xác nhận lưu thay đổi mà, thì mình cùng đi phân tích thử:

commit() : hoạt động theo cơ chế đồng bộ Synchronous, nếu như bạn khởi tạo 2 editor để chỉnh sữa dữ liệu “HIGH_SCORE” thì editor nào thực hiện trước sẽ làm trước và thằng nào đến sau sẽ làm sau, vì vậy cái commit() được gọi cuối cùng sẽ là cái thắng.Và bạn sẽ được thông báo là true hay false nếu như thành công hoặc thất bại.

apply() : hoạt động theo cơ chế không đồng bộ Asynchronous, và dù có thành công hay không thì bạn sẽ không nhận được kết quả trả về.

Theo mọi người bảo thì apply() được thêm vào do không ai để ý đến kết quả trả về và nó nhanh hơn do không đồng bộ.

Ví dụ đơn giản như sau bạn sẽ hiểu:

Nếu bạn có 2 Editor để chỉnh sửa thuộc tính “IS_FIRTS_LAUNCHER” và “HIGH_SCORE”, 2 Editor này xử dụng phương pháp apply() để lưu thay đổi thì nó sẽ đồng thời chỉnh sửa 2 thuộc tính đó và lưu lại mất khoảng thời gian 100 milisecond .Tuy nhiên nếu bạn dùng commit(), thì là vì đồng bộ nên Editor 1 sẽ vào chỉnh sửa “IS_FIRTS_LAUNCHER” sao đó 100 milisecond thì Editor 2 nhảy vào chỉnh sửa “HIGH_SCORE”, lúc này tổng 2 quá trình cộng lại sẽ tốn khá nhiều thời gian hơn.

Vậy sau khi đã commit hay apply thì bây giờ dữ liệu bạn sẽ được lưu dưới thư mục data mình đã ghi ở trên, cái này mình nói chi tiết trong video nhé.Đây là kết quả sau khi gọi editor.commit() hoặc editor.apply().

2.Các lấy dữ liệu từ Shared Prenferences

Vậy sau khi đã lưu rồi thì lấy ra như thế nào nhỉ? Khá là đơn giản luôn, tương tự như lưu dữ liệu bạn dùng put để đưa vào thì lấy ra bạn dùng get thôi, cái này y chang việc truyền dữ liệu giữa các activity với nhau chúng ta đã học qua ấy nhỉ?

Đây là cách chúng ta lấy ra tất cả các dữ liệu mà ở trên mình đã lưu nhé:


Bạn sẽ không dùng Editer nữa mà chỉ cần khởi tạo đối tượng SharedPreferences rồi sau đó get ra các giá trị như trên thôi, cụ thể:

sharedPreferences.getBoolean(String key, defValue) :

key: thì tương tự như trên mình đã nói rồi.

defValue: đây là giá trị mặc định mà nó sẽ lấy ra trong trường hợp bạn chưa lưu dữ liệu vào Shares Prenferences, ví dụ như bạn chưa lưu HIGH_SCORE xuống thì làm sao nó lấy lên được, để phòng trường hợp này bạn sẽ truyền giá trị mặc định cho nó là defValue.

3.Các xoá dữ liệu đã lưu xuống Shared Preferences

Mọi thứ liên quan đến chỉnh sửa: edit, update, remove… thì bạn phải dùng editor nhé, và ở đây nếu bạn muốn xoá đi dữ liệu nào đó đã lưu trong Shared Preferences thì chỉ cần gọi lênh:


key: chính là tên đối tượng bạn đã lưu xuống, mình đã giải thích ở trên, nhớ sau đó phải gọi hàm editor.apply() hoặc commit() nhé.

Và trước hợp bạn muốn xoá đi hết tất cả giá trị đã lưu thì bạn dùng cú pháp:


Và cũng lại gọi editor.apply() hoặc commit() để lưu thay đổi.

Cụ thể hơn bạn sẽ xem video hướng dẫn chi tiết của mình dưới đây nhé.

Video hướng dẫn về Shared Preferences trong android

Download Source Code

Mọi ý kiến thắc mắc xin các bạn cứ comment bên dưới blog hoặc video, xin chân thành cảm ơn!

Bài 1: Shared Preferences trong android
4.8 (96%) 5 votes

6 Comments

  1. Trung April 20, 2017
    • trangchongcheng April 21, 2017
  2. Đăng Huân July 20, 2017
  3. Đăng Huân July 20, 2017
  4. đình Sơm August 22, 2017
  5. minh đại September 16, 2017

Add Comment

*