Hướng dẫn tự học lập trình android tại nhà

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Hướng dẫn tự học lập trình android tại nhà

Bài gửi by t11nguyen on 19/6/2017, 11:27

Giới thiệu - hướng dẫn về cách lưu dữ liệu ở trên file.
Bài học hôm nay tôi sẽ hướng dẫn các bạn, các bạn chú ý theo dõi nhé

Hầu hết khi làm ứng dụng chúng ta đều phải lưu lại dữ liệu để dùng cho các lần làm việc sau này, chẳng hạn như lưu thông tin của người dùng, lưu trạng thái của ứng dụng… Có 3 cách lưu trữ dữ liệu đó là:


  • Lưu dưới dạng từ điển trong các file ưu tiên
  • Lưu file trong thẻ nhớ
  • Lưu trong cơ sở dữ liệu SQLite

Trong phần này chúng ta sẽ tìm hiểu về 2 cách đầu tiên. Trong phần sau chúng ta sẽ tìm hiểu về cách lưu dữ liệu với cơ sở dữ liệu SQLite  https://vietpro.net.vn/lap-trinh-android

Lưu dưới dạng từ điển trong các file ưu tiên
Các file ưu tiên ở đây là các file nằm trong thư mục shared-refs, thư mục này nằm trong thư mục cài đặt ứng dụng trên máy của bạn.

Nếu dữ liệu bạn lưu lại không lớn lắm thì bạn nên sử dụng cách này. Ở đây chúng ta sẽ dùng lớp SharedPreferences để lưu trữ dữ liệu, đối tượng SharedPreferences trỏ tới một file XML chứa dữ liệu là các cặp khóa-giá trị và cung cấp các phương thức để đọc và ghi dữ liệu trên file này.

Tạo đối tượng SharedPreferences
Để tạo một đối tượng SharedPreferences thì chúng ta dùng một trong 2 phương thức:


  • getSharedPreferences() — phương thức này sẽ trả về một đối tượng SharedPreferences trỏ tới một file do chúng ta chỉ định.
  • getPreferences() — mặc định ứng dụng đã có sẵn một file riêng để lưu dữ liệu, phương thức này sẽ trả về đối tượng SharedPreferences trỏ tới file đó.

Chúng ta sẽ dùng phương thức getSharedPreferences() khi muốn lưu dữ liệu trong nhiều file khác nhau, phương thức này nhận vào tên file và chế độ đọc. Ví dụ:

import android.content.SharedPreferences;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState)
   
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       SharedPreferences sharedPref = getSharedPreferences("save", Context.MODE_PRIVATE);  
   

Chế độ MODE_PRIVATE tức là file này chỉ có thể mở được từ ứng dụng của chúng ta. File save.xml sẽ được tạo ra nếu chưa có.

Còn nếu chúng ta không cần lưu vào nhiều file khác nhau thì có thể dùng file mặc định của ứng dụng bằng cách dùng phương thức getPreferences():

1
SharedPreferences pref = getPreferences(Context.MODE_PRIVATE);
Ghi dữ liệu lên đối tượng SharedPreferences
Để ghi dữ liệu lên các file ưu tiên này thì chúng ta tạo một đối tượng SharedPreferences.Editor từ phương thức SharedPreferences.edit().

Lớp SharedPreferences cung cấp các phương thức ghi các kiểu dữ liệu thông thường như putInt() để ghi một giá trị số nguyên, putFloat() ghi số thực, putString() ghi chuỗi... các phương thức này nhận vào khóa kèm theo giá trị. Sau khi gọi các phương thức này chúng ta gọi phương thức commit() thì dữ liệu mới thực sự được ghi vào file. Ví dụ:



import android.content.Context;
import android.content.SharedPreferences;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState)
   
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       SharedPreferences pref = getPreferences(Context.MODE_PRIVATE);
       SharedPreferences.Editor editor = sharedPref.edit();
       editor.putString("Username", "");
       editor.commit();
   

Trong đoạn code trên chúng ta lưu một khóa có tên là Username với giá trị là  vào file ưu tiên có sẵn trong ứng dụng.

Đọc dữ liệu từ đối tượng SharedPreferences
Để đọc dữ liệu thì chúng ta gọi các phương thức như getInt(), getFloat(), getString()... từ đối tượng SharedPreferences. Các phương thức này nhận vào khóa và một giá trị mặc định, giá trị mặc định này có nghĩa là nếu khóa không tồn tại thì tạo khóa mới có giá trị là giá trị mặc định. Ví dụ:
import android.content.Context;
import android.content.SharedPreferences;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState)
   
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       SharedPreferences pref = getPreferences(Context.MODE_PRIVATE);
       String username = pref.getString("Username", "Default");
       Toast toast = Toast.makeText(getApplicationContext(),username,Toast.LENGTH_LONG);
       toast.show();
   

Trong đoạn code trên, nếu khóa Username đã tồn tại thì sẽ trả về giá trị của khóa đó, ngược lại thì tạo một khóa mới là lưu giá trị mặc định là Default. Lớp Toast là một widget trong Android có tác dụng in một câu thông báo lên màn hình rồi tắt đi.

Tìm hiểu về phương pháp https://vietpro.net.vn/lap-trinh-codeigniter']học codeigniter cơ bản

Lưu dữ liệu trong file của hệ điều hành
Nếu dữ liệu cần lưu trữ khá lớn, chẳng hạn như lưu ảnh… thì chúng ta nên dùng cách này. Để lưu dữ liệu lên file thì chúng ta có thể đơn giản là dùng lớp java.io.FileOutputStream của Java là đủ rồi. Hệ thống file của Android cũng không khác gì so với hệ thống file trên các nền tảng khác như Linux, Windows…

Internal và External
Các máy Android có 2 khu vực lưu trữ file là Internal và External, hay chúng ta còn gọi là thẻ nhớ trong và thẻ nhớ ngoài. Trong đó Internal là bộ nhớ mặc định có sẵn của từng máy, còn External là thẻ nhớ ngoài thường là mua thêm rồi gắn vào, nếu không cần thì có thể gỡ ra thay cái khác. Ngoài ra còn có một số máy đặc biệt chia thẻ nhớ trong thành 2 phân vùng là Internal và External, tức là những máy này thực chất chỉ có 1 thẻ nhớ trong nhưng trong máy lúc nào cũng hiện ra 2 thẻ nhớ Internal và External và các thao tác với phân vùng External này giống hệt như với một thẻ nhớ ngoài thật.

Đây là bảng so sánh 2 loại thẻ nhớ:

INTERNAL EXTERNAL
Luôn có sẵn trong máy Có thể có hoặc không vì người dùng có thể gỡ thẻ nhớ ra
Dữ liệu của ứng dụng nào chỉ có thể truy xuất bởi ứng dụng đó Dữ liệu lưu ở đây có thể được đọc bởi bất kì ứng dụng nào tại bất cứ thời điểm nào
Khi ứng dụng bị xóa thì dữ liệu lưu trong này cũng bị xóa Khi ứng dụng bị xóa thì dữ liệu sẽ bị xóa nếu được lưu trong thư mục của ứng dụng
Theo bảng trên thì chúng ta nên sử dụng khu vực Internal nếu dữ liệu cần lưu trữ là loại dữ liệu riêng tư, không thể cho người khác biết. Còn khu vực External dành cho những dữ liệu được chia sẻ cho các ứng dụng khác hoặc với các thiết bị khác.



Mặc định ứng dụng được cài trên bộ nhớ Internal, nhưng chúng ta có thể sử dụng thuộc tính android:installLocation để quy định ứng dụng được cài trên bộ nhớ External, việc này sẽ rất có ích cho các ứng dụng có dung lượng lớn, vì thường bộ nhớ Internal được cài mặc định vào máy có dung lượng khá thấp và không thể thay đổi, trong khi bộ nhớ External có thể tháo ra lắp vào dễ dàng vào thường bộ nhớ External có dung lượng cao hơn Internal nhiều.

Lấy quyền sử dụng bộ nhớ External
Để có thể ghi dữ liệu lên bộ nhớ External thì ứng dụng phải được cấp quyền sử dụng bộ nhớ, chúng ta lấy quyền này bằng cách khai báo trong file AndroidManifest.xml như sau:



   
   
   ...

WRITE_EXTERNAL_STORAGE là quyền được ghi dữ liệu lên thẻ nhớ, còn READ_EXTERNAL_STORAGE là quyền đọc dữ liệu. Nếu chúng ta khai báo quyền ghi dữ liệu thì ứng dụng sẽ được cấp cả quyền đọc dữ liệu luôn.

Đối với bộ nhớ Internal thì ứng dụng nào cũng có thể đọc ghi được nên không cần xin quyền.

Lưu file lên bộ nhớ Internal
Mặc định trong thư mục cài đặt của mỗi ứng dụng có 2 thư mục tên là filescache, trong đó thư mục files lưu các file như bình thường còn thư mục cache lưu các file dùng tạm, chúng ta chỉ nên lưu các dữ liệu ít quan trọng vào thư mục cache và phải xóa đi khi không còn dùng nữa, nếu không hệ điều hành sẽ tự xóa khi bộ nhớ bị đầy, các loại dữ liệu còn lại thì lưu trong thư mục files.

Chúng ta có thể sử dụng lớp java.io.FileOutputStream của Java là có thể đọc ghi như bình thường. Ví dụ:
Tất nhiên là bạn cũng không cần thiết phải kiểm tra dung lượng còn trống của ổ đĩa, thay vào đó bạn có thể cho ghi dữ liệu lên thẻ nhớ luôn và chỉ cần bắt lỗi IOException là đủ.

Xóa file
Khi file không còn dùng được nữa bằng phương thức delete() của lớp java.io.File.


file.delete();
Nếu dữ liệu được lưu trên vùng Internal thì chúng ta có thể dùng phương thức deleteFile() của lớp android.app.Activity, phương thức này sẽ nhận vào tên file:


deleteFile(fileName);`
Nhắc lại là mặc định khi ứng dụng bị xóa thì hệ điều hành sẽ xóa toàn bộ file trong khu vực Internal và toàn bộ file trong thư mục của riêng ứng dụng ở External, bạn cũng nên tự tay xóa toàn bộ mọi thứ để tránh lãng phí bộ nhớ.
Tài liệu lập trình full cho các bạn muốn học, xem tại https://vietpro.net.vn/hoc-lap-trinh-web-php-co-ban
Các bạn chú ý theo dõi các bài học tiếp theo nhé. Chúc các bạn thành công.

t11nguyen
Binh Nhất
Binh Nhất

Tổng số bài gửi : 36
Tuổi : 28
Đăng ký ngày : 22/04/2017
Danh tiếng : 0

Xem lý lịch thành viên

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết