Thứ Tư, 17 tháng 4, 2013

Data Storage in Android




Android cung cấp một số tùy chọn để bạn có thể lưu dữ liệu ứng dụng liên tục. Các giải pháp bạn chọn phụ thuộc vào nhu cầu cụ thể của bạn, chẳng hạn như dữ liệu cần private hoặc được truy cập từ các ứng dụng khác (public) cần bao nhiêu không gian cho dữ liệu của bạn.

Tùy chọn lưu trữ dữ liệu của bạn như sau:

Shared Preferences
    Lưu trữ dữ liệu cá nhân nguyên thủy trong cặp
key-value.
Internal  Storage
    Lưu trữ dữ liệu cá nhân trên bộ nhớ điện thoại.
Ex
ternal  Storage
    Lưu trữ dữ liệu
public trên chia sẻ lưu trữ bên ngoài (SDCard).
SQLite
Databases
    Lưu trữ dữ liệu cấu trúc trong một
private database.
Network Connection
    Lưu trữ dữ liệu trên các trang web với máy chủ mạng riêng của bạn.

Android cung cấp một cách để lộ dữ liệu cá nhân của bạn cho các ứng dụng khác với
Content Provider.

1. Shared Preferenxes
Lớp SharedPreferences cung cấp một khuôn khổ chung cho phép bạn lưu trữ và lấy cặp giá trị key-value. Bạn có thể sử dụng SharedPreferences để lưu bất kỳ dữ liệu nguyên thủy nào như: booleans, float, ints, longs, strings. Dữ liệu này sẽ tồn tại thông qua user sessions (ngay cả khi ứng dụng của bạn bị tắt đi).

Để có được một đối tượng SharedPreferences cho các ứng dụng của bạn, hãy sử dụng một trong hai phương pháp:

    getSharedPreferences () - Sử dụng
nếu bạn cần nhiều tập tin preferences được xác định theo tên, bạn chỉ định với tham số đầu tiên.
    getPreferences () - Sử dụng điều này nếu bạn chỉ cần một tập tin
preferences cho your activity. c ó  duy nhất một tập tin preferences cho your activity, bạn không c â ần  cung cấp một cái tên.

Để viết các giá trị:
    Gọi
edit() để có được một SharedPreferences.Editor.
    Thêm giá trị với các phương pháp như putBoolean () và putString ().
    Cam kết giá trị mới với
commit()

Để đọc các giá trị, sử dụng
phương thức SharedPreferences như getBoolean () và getString ().
public class SharedPrefsActivity extends Activity {

public static final String PREFS_NAME = "MyApp_Settings";

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);

// Writing data to SharedPreferences
Editor editor = settings.edit();
editor.putString("key", "some value");
editor.commit();

// Reading from SharedPreferences
String value = settings.getString("key", "");
Log.d(TAG, value);
}


2. Internal Storage

Bạn có thể lưu các tập tin trực tiếp vào bộ nhớ trong của thiết bị. Theo mặc định, các tập tin được lưu vào không gian trong ứng dụng của bạn các ứng dụng khác không thể truy cập chúng. Khi người sử dụng tháo gỡ ứng dụng của bạn, những tập tin này được gỡ bỏ.

Để tạo và viết một tập tin để lưu trữ nội bộ:
    Gọi openFileOutput () với tên của tập tin và
operating mode. trả về một FileOutputStream.
    Viết đến
file call  write().
    Đóng dòng với close ().
String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

MODE_PRIVATE sẽ tạo ra các tập tin (hoặc thay thế một tập tin cùng tên) make it private to your application. Các chế độ khác có sẵn là: MODE_APPEND, MODE_WORLD_READABLE, và MODE_WORLD_WRITEABLE.

Để đọc một tập tin từ
internal storage:
    Gọi openFileInput().
trả về một FileInputStream.
    Đọc byte
s từ các tập tin với read().
    Sau đó, đóng dòng với close ().

 

Saving cache files

Nếu bạn muốn để cache một số dữ liệu, chứ không phải lưu trữ nó liên tục, bạn nên sử dụng getCacheDir () để mở File đại diện cho các thư mục bên trong ứng dụng của bạn nên lưu các tập tin bộ nhớ cache tạm thời.

Khi điện thoại được thấp trên không gian lưu trữ nội bộ, Android có thể xóa các tập tin bộ nhớ cache để khôi phục không gian. Tuy nhiên, bạn không nên dựa trên hệ thống để làm sạch các tập tin cho bạn. Bạn nên luôn luôn duy trì các tập tin bộ nhớ cache chính mình và ở lại trong một giới hạn hợp lý tiêu thụ không gian, chẳng hạn như 1MB. Khi người sử dụng tháo gỡ ứng dụng của bạn, những tập tin này được gỡ bỏ.

 

Other useful methods

getFilesDir ()
    Nhận được đường dẫn tuyệt đối đến thư mục hệ thống tập tin nơi các tập tin nội bộ của bạn được lưu.
getDir ()
    Tạo (hoặc mở) thư mục hiện trong không gian lưu trữ nội bộ của bạn.
deleteFile ()
    Xóa một tập tin lưu trên lưu trữ nội bộ.
filelist ()
    Trả về một mảng các file được lưu bởi ứng dụng của bạn.
Example :
File mediaDir = new File("media");

if (!mediaDir.exists()){

   mediaDir.createNewFile();

   mediaDir.mkdir();
}

File f = new File(getLocalPath());

f.createNewFile();

FileOutputStream fos = new FileOutputStream(f);

fos.write(data);

fos.close();
 
getLocalPath()à returns /data/data/myPackage/files/media/qmhUZU.jpg
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
 
 
3. External Storage
Mỗi thiết bị tương thích với hệ điều hành Android hỗ trợ lưu trữ bên ngoài  mà bạn có thể sử dụng để lưu các tập tin. Điều này thể là một phương tiện truyền thông lưu trữ di động (như một thẻ SD) hoặc lưu trữ nội bộ (không thể tháo rời). Các tập tin được lưu vào lưu trữ bên ngoài có thể đọc được và có thể được sửa đổi bởi người sử dụng khi họ cho phép lưu trữ USB để chuyển các tập tin trên một máy tính.

Checking media availability

Trước khi bạn làm bất kỳ công việc với việc lưu trữ bên ngoài, bạn nên luôn luôn gọi getExternalStorageState () để kiểm tra xem các phương tiện truyền thông sẵn. Các phương tiện truyền thông thể được gắn với một máy tính, missing, read-only, or in some other state. Ví dụ, đây là cách bạn có thể tự kiểm tra:
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();
 
if (Environment.MEDIA_MOUNTED.equals(state)) {
    // We can read and write the media
    mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    // We can only read the media
    mExternalStorageAvailable = true;
    mExternalStorageWriteable = false;
} else {
    // Something else is wrong. It may be one of many other states, but all we need
    //  to know is we can neither read nor write
    mExternalStorageAvailable = mExternalStorageWriteable = false;
}
 
èVí dụ này kiểm tra xem lưu trữ bên ngoài là có sẵn để đọc và viết. GetExternalStorageState () phương thức trả về bạn có thể muốn để kiểm tra, chẳng hạn như việc các phương tiện truyền thông đang được chia sẻ (kết nối với máy tính), missing, đã được gỡ bỏ xấu, vv Bạn có thể sử dụng các thông báo cho người sử dụng với thêm thông tin khi ứng dụng của bạn cần phải truy cập vào các phương tiện truyền thông.

Accessing files on external storage

Nếu bạn đang sử dụng API Level 8 hoặc cao hơn, sử dụng getExternalFilesDir () để mở File đại diện cho thư mục lưu trữ bên ngoài nơi bạn nên lưu các tập tin của bạn. Phương pháp này có một tham số kiểu quy định cụ thể các loại của thư mục con bạn muốn, chẳng hạn như DIRECTORY_MUSIC DIRECTORY_RINGTONES.
 Phương pháp này sẽ tạo ra các thư mục thích hợp nếu cần thiết. Bằng cách xác định các loại thư mục, bạn đảm bảo rằng máy quét phương tiện truyền thông của Android đúng cách sẽ phân loại các tập tin của bạn trong hệ thống (ví dụ, nhạc chuông được xác định là nhạc chuông và not music). Nếu người sử dụng tháo gỡ ứng dụng của bạn, thư mục này và tất cả các nội dung của nó sẽ bị xóa.

Nếu bạn đang sử dụng API Level 7 hoặc thấp hơn, sử dụng getExternalStorageDirectory (), để mở một tập tin đại diện cho các thư mục gốc của các lưu trữ bên ngoài. Sau đó, bạn nên ghi dữ liệu của bạn trong thư mục sau:

/ Android / data / <package_name> / files /

<package_name> tên gói Java-style của bạn, chẳng hạn như "com.example.android.app". Nếu thiết bị của người dùng đang chạy API Level 8 hoặc cao hơn và họ gỡ bỏ cài đặt ứng dụng của bạn, thư mục này và tất cả các nội dung của nó sẽ bị xóa.

Saving files that should be shared

Nếu bạn muốn lưu các tập tin không cụ thể cho ứng dụng của bạn không xóa khi ứng dụng của bạn được gỡ bỏ, lưu chúng vào một thư mục nào trên lưu trữ bên ngoài. Những thư mục này nằm thư mục gốc của các lưu trữ bên ngoài, chẳng hạn như / Music, Pictures / Ringtones / others.

Trong API Level 8 hoặc cao hơn, sử dụng getExternalStoragePublicDirectory ()
with type same as DIRECTORY_MUSIC, DIRECTORY_PICTURES, DIRECTORY_RINGTONES, hoặc others. Phương pháp này sẽ tạo ra các thư mục thích hợp nếu cần thiết.

Nếu bạn đang sử dụng API Level 7 hoặc thấp hơn, sử dụng getExternalStorageDirectory () để mở File đại diện cho thư mục gốc của các lưu trữ bên ngoài, sau đó lưu các tập tin chia sẻ của bạn trong một trong các thư mục sau đây:

    Music / -
    Podcast / -
    Ringtones / - nhạc chuông.
    
Alarms / - âm thanh báo động.
    
Notifications / -  âm thanh thông báo.
    
Pictures / - Tất cả hình ảnh.
    
Movies / - Tất cả các phim.
    
Download /

Saving cache files

Nếu bạn đang sử dụng API Level 8 hoặc cao hơn, sử dụng getExternalCacheDir () để mở File đại diện cho thư mục lưu trữ bên ngoài nơi bạn nên lưu các tập tin bộ nhớ cache. Nếu các người dùng gỡ bỏ ứng dụng của bạn, những file này sẽ được tự động xóa. Tuy nhiên, trong ứng dụng của bạn, bạn nên quản lý những tập tin bộ nhớ cache loại bỏ những người không cần thiết để bảo tồn không gian tập tin.

Nếu bạn đang sử dụng API Level 7 hoặc thấp hơn, sử dụng getExternalStorageDirectory () để mở một tập tin đại diện cho thư mục gốc của các lưu trữ bên ngoài, sau đó viết dữ liệu bộ nhớ cache của bạn trong thư mục sau:

/ Android / data / <package_name> / cache /

<package_name> tên gói Java-style của bạn, chẳng hạn như "com.example.android.app".

5. Network Connection

Refers to storing data on the cloud. HTTP or FTP file and content transfers through the java.net.* packages makes this happen.
(dùng để lưu trữ dữ liệu trên đám mây. Tập tin HTTP hoặc FTP chuyển nội dung thông qua các gói java.net.*)

không phải là thực sự là một kỹ thuật lưu trữ dữ liệu, nhưng thể là một cách dữ liệu bền bỉ cho một người dùng cụ thể, cung cấp thiết bị được kết nối với internet, bằng cách sử dụng một số loại xác thực. Bạn phải cân bằng giữa việc tải dữ liệu mỗi khi ứng dụng cần nó, hoặc có một thời gian đồng bộ dữ liệu, mà cuối cùng sẽ dẫn đến một trong các tùy chọn lưu trữ đã đề cập ở trên.
Examples
You can also use Internet to store your data. Here's an example code how can you upload your file(s) to you remote web server:
File f = new File(“path/fileToUpload.txt”);
HttpRequest request = new HttpRequest(“http://host/some_path”);
Part[] parts = { new StringPart(param_name,value), new FilePart(f.getName(), f) };
filePost.setEntity( new MultipartRequestEntity(parts, filePost.getParams()) );
HttpClient client = new HttpClient();
int status = client.executeMethod(filePost);

Không có nhận xét nào:

Đăng nhận xét

Học lập trình web căn bản với PHP

Bài 1: Các kiến thức căn bản Part 1:  https://jimmyvan88.blogspot.com/2012/05/can-ban-lap-trinh-web-voi-php-bai-1-cac.html Part 2:  https://...