File, Custom Formating

advertisement
Acessing file
•
•
•
•
Cource:
Instructor:
Student :
Email:
Embedded Systems and Realtime
Dr. Tran Thi Minh Chau
Nguyen Van Lan
lancan.nguyen@gmail.com
Out line:
•
Data Storage & Accessing File
Shared Preferences
Internal Storage
External Storage
SQLite Databases
•
Custom Format Text ( My Project)
HTML & Spanned
Demo
Data Storage
• Trong android, Data được lưu trữ với nhiều option khác nhau:
Shared Preferences
Dữ liệu là private, dưới dạng cặp Key-Value
Internal Storage
Lưu dữ liệu ở chế độ private và lưu trên các thiết bị vật lý
External Storage
Lưu dữ liệu ở chế độ public và lưu trên các thiết bị vật lý
ngoài như Sdcard
SQLite Databases
Là hình thức lưu dữ liệu có cấu trúc và hỗ trợ truy vấn
theo câu lệnh SQL
Network Storage
JDBC
Shared Preferences
Là hình thức lưu trữ dạng <Name, Value>
Dữ liệu là kiểu cơ bản: booleans, floats, ints, longs, and strings.
Hiệu quả trong việc lưu thông tin cấu hình, thông tin kết nối,
ứng dụng….
Có gì đó giống với Bundles
Bền vững hơn Bundles
Shared Preference API
•
•
•
•
•
•
•
Tạo một đối tượng Shared Preferences
getShared Preferences()
getPreferences()
Để thao tác:
Gọi edit() trả về đối tượng SharedPreferences.Editor
Thêm giá trị : putBoolean(),putString()
Commit() để thực hiện thao tác
• Tham khảo thêm
:http://developer.android.com/reference/android/content/Sh
aredPreferences.html
Internal Storage
• File được lưu trực tiếp trên thiết bị bộ nhớ trong.(Internal
Storage)
• Dữ diệu này là private và chỉ chịu sự quản lí của chính ứng
dụng đang chạy nó, các ứng dụng khác không thể truy cập
được
• Tạo ghi private file trong Internal Storage:
• Dùng openFileOutput() phương thức này trả về đối tượng
FileOutputStream:
• Code : FileOutputStream f = openFileOutput( FILENAME,
Context.MODE_PRIVATE);
f.write(string.getBytes()); // ghi file
f.close(); // đóng tream lại
• Khi đọc file từ bộ nhớ trong ta dùng phương thức
openFileInput() để tạo một đối tượng FileInputStream
• Sau đó thao tác với file bằng các phương thức: read(),close()
FileInputStream.read()
Tip : Những file thường xuyên sử dụng trong quá trình chạy ứng
dụng ta cần lưu chúng cố định tại một nơi : res/raw
OpenRawResource()
-> Lưu cache files:
Tăng tốc độ cho chương trình, tuy nhiên phải thường xuyên dọn
dẹp file cache để tối ưu không gian nhớ trong
External Storage
• Lưu trữ ngoài ( External Storage )
Ưu điểm:
Không gian lưu trữ lớn
Dễ di chuyển giữa các thiết bị :PC, Mobile
Dễ thay thế nâng cấp
Nhược điểm:
Tính bảo mật không cao : public data
Tốc độ truy cập thấp
Accessing file on External Storage
• Trước khi dùng External Storages cần phải kiểm tra trạng trái thiết bị
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;
}
Accessing
• Mở một file: getExternalFilesDir() (API >= 8)
getExternalStorageDirectory() (API < 7)
Thư mực để viết dữ liệu:
/Android/data/<package_name>/files/
<package_name>: tên package định dạng theo kiểu trong
java
Lưu ý : cần phải khai báo quyền truy cập trong manifest
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORA
GE"/>
Thao khảo : http://www.youtube.com/watch?v=_WtTmPmrzI&feature=relmfu
Custom Fomat text
Spanned & HTML
CharSequence
•
Int getSpanStart(Object)
Int getSpanEnd(Object)
T[] getSpans(int start,int end,class<T>)
Void removeSpan(Object)
Void setSpan(Object, int,int, int flags)
Editable insert(int where,Charsequence)
Editable replace(int, int, Charsequence)
Editable delete(int ,int)
Void clear()
Void clearSpans()
Spanned
SpannedString
•
•
Spannable
Immutable markup, immutable text
Mutable markup, immutable text
SpannableString
Immutable markup, immutable text
Editable
Interface
SpannableStringBuilder
Implementation
Presentation and saving
Presentation
Saving
Spanned Html.fromHtml(String)
String Html.toHtml(Spanned)
Đổi một đoạn mã HTML sang một
đối tượng Spanned
Biểu diễn đối tượng Spanned
bằng mã HTML
Edittext.setText(Spanned)
Biểu diễn Spanned ra bằng một
TextView
Đến đây ta có thể lưu đối tượng
vào CSDL và lần sau gọi lại
Người dùng thao tác
với Edit text
Saving
Html.toHtml
Convert to Html
Spanned
String
Database
Convert to Spanned
String
Html.fromHtml
Presentation
Spanned
But …..
• Không phải thẻ HTML nào cũng hỗ trợ bởi phương thức Html.fromHtml,
Html.toHtml
• Ta phải Implement interface Html.TagHandler
Public Class myHandler implements TagHandler{
public void handleTag(boolean opening,String tag, Editable
output,XMLreader xmlReader){
// doing somethings with tag
}
}
Khi sử dụng Spanned Html.fromHtml(String source, ImageGetter null,
myHandler handler);
Ở phần này ta tham khảo ở:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.a
ndroid/android/2.2_r1.1/android/text/Html.java
Conclusion
• Phần đầu tiên Accessing File là kỹ thuật cơ bản trong phát
triển ứng dụng Android
• Trong phần Custom format text là giải pháp cá nhân em đưa ra
trong quá trình làm Project cho ứng dụng Nhật ký
Reference:
File :
Android-Chapter15-Files.pptx [Cleverland University]
http://www.ibm.com/developerworks/vn/library/xandroidstorage/index.html
http://developer.android.com/guide/topics/data/datastorage.html
http://developer.android.com/reference/android/text
Thank you!
Download