Hướng dẫn lĩnh vực mongodb
Cơ sở dữ liệu cõi là cơ sở dữ liệu dành cho thiết bị di động, được xây dựng từ nền tảng cho phép chạy trực tiếp trong điện thoại, bảng máy tính và các thiết bị đeo được Show
Realm có một slogan rất hay. “cơ sở dữ liệu tốt hơn, nhanh hơn, đơn giản hơn“ Dễ dàng nhận ra các từ “tốt hơn, nhanh hơn và đơn giản hơn” với nghĩa là so sánh giữa Relam và SQLite. Trong khi SQLite vẫn là sự lựa chọn mặc định từ xưa đến nay và vẫn tiếp tục phát triển Cơ sở dữ liệu Realm trong Android đang hoạt động như thế nào?Realm active bằng cách lưu các Đối tượng Java trực tiếp vào đĩa thay vì ánh xạ chúng sang một kiểu dữ liệu khác như SQLite đang làm Vương quốc có thể ánh xạ nhiều loại Đối tượng khác nhau vào một tệp trên đĩa. Hay nói cách khác, Các cõi không có yêu cầu ánh xạ riêng biệt từng đối tượng Java đến phiên bản được lưu trữ trên đĩa Nó giống với triết lý. “cái bạn thấy là cái được lưu”. Nếu các đối tượng được quản lý bởi Realm bị thay đổi bởi người dùng, nó sẽ tự động được lưu vào cơ sở dữ liệu. Vương quốc quản lý các Đối tượng tương tự như SQLite quản lý các bảng Để một lớp Java trở thành Realm Managed, Lớp đó phải mở rộng từ RealmObject hoặc triển khai Giao diện RealmModel Realm database in Android with apps display the languageĐể hiểu rõ hơn Realm database trong Android, chúng ta hãy tạo một ứng dụng demo đơn giản. Hiển thị các câu danh ngôn được lưu trong cơ sở dữ liệu sử dụng Realm Ứng dụng có giao diện kiểu như sau Ứng dụng tuyển tập câu lệnh hay#1. Cài đặt cơ sở dữ liệu Realm trong AndroidChuyển từ SQLite sang Realm database cũng rất đơn giản. Thêm Realm vào dự án Android mới hoặc dự án Android hiện tại chỉ cần thực hiện các bước sau Đầu tiên, bạn thêm các phụ thuộc sau khi xây dựng. phân lớp buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath "io.realm:realm-gradle-plugin:2.3.1" } } Sau đó, bạn áp dụng plugin apply plugin: 'com.android.application' apply plugin: 'realm-android'0 vào file build đầu tiên. gradle (trong ứng dụng thẻ) apply plugin: 'com.android.application' apply plugin: 'realm-android' Khi thay đổi bản dựng. gradle, bạn nhớ sync lại grade khi Android Studio yêu cầu nhé 🔥 Học cách sử dụng Android Studio chi tiết. Toàn tập cách sử dụng Android Studio OK, chúng ta đã hoàn thành bước đầu, bước tiếp theo là khởi động nó #2. Khởi tạo cơ sở dữ liệu Realm database trong AndroidNơi tốt nhất để thực hiện việc khởi động này là trong một lớp mở rộng từ Ứng dụng Đối với dự án demo, mình thêm một lớp là ProntoQuoteApplication. java Để khởi động Realm cơ sở dữ liệu, ta làm như sau public class ProntoQuoteApplication extends Application { @Override public void onCreate() { super.onCreate(); if (LeakCanary.isInAnalyzerProcess(this)){ return; } initRealm(); } private void initRealm() { Realm.init(this); RealmConfiguration config = new RealmConfiguration.Builder() .name("prontoschool.realm") .schemaVersion(1) .deleteRealmIfMigrationNeeded() .build(); Realm.setDefaultConfiguration(config); } Trong đoạn mã trên, mình đã sử dụng RealmConfiguration Object để truyền các tham số đến Realm Bước này thực ra chỉ là tùy chọn thôi – nếu chúng ta không cấu hình cơ sở dữ liệu thì những thông số mặc định sẽ được sử dụng #3. Tạo bảng cơ sở dữ liệu RealmTrong Realm không có bảng khái niệm như SQLite, thay vào đó chúng ta có Realm Managed object Cụm từ “tạo bảng” được sử dụng chỉ là do sự tương đồng mà thôi. Để tạo bảng hoặc cập nhật các đối tượng tự động, tất cả các lớp mô hình phải được mở rộng từ lớp RealmObject Trong Realm cũng có thể xây dựng mối quan hệ một – nhiều (1-n). Ví dụ như app demo trong bài viết này là mối quan hệ giữa. Tác giả và trích dẫn. Một tác giả có thể có nhiều trích dẫn nhưng một trích dẫn thì chỉ có một tác giả public class Quote extends RealmObject{ @PrimaryKey private long id; private String quote; private Author author; private Category category; private String quoteBackgroundImageUrl; private boolean isFavourite; } public class Author extends RealmObject{ @PrimaryKey private long id; private String authorName; private String authorImageUrl; private RealmListquotes; } Bây giờ chúng ta có thể lưu các thể hiện của các lớp này trực tiếp vào cơ sở dữ liệu Realm #4. Việc tạo Khóa chính tự động tăngHiện tại, Realm không hỗ trợ khóa chính tự động tăng (auto increment). Vì sao làm thế nào bây giờ? Cách workaground đơn giản là chúng ta tăng giá trị khóa chính thủ công. Mình định nghĩa một biến tĩnh (biến tĩnh) kiểu AtomicLong trong ProntoQuoteApplication. java Khi ứng dụng chạy, mình sẽ kiểm tra các bảng, đối tượng quản lý. Nếu nó đã được tạo, mình sẽ lấy giá trị khóa chính tối đa của đối tượng đó và lưu nó trong biến AtomicLong Sau đó, mỗi khi muốn lưu một đối tượng vào cơ sở dữ liệu, mình sẽ có khóa chính và tự động tăng giá trị của nó lên rồi sử dụng nó cho lần tiếp theo Đây là cách thực hiện bằng mã public class ProntoQuoteApplication extends Application { public static AtomicLong quotePrimaryKey; public static AtomicLong authorPrimaryKey; @Override public void onCreate() { super.onCreate(); initRealm(); } private void initRealm() { Realm.init(this); RealmConfiguration configuration = new RealmConfiguration.Builder() .name(Constants.REALM_DATABASE) .schemaVersion(1) .deleteRealmIfMigrationNeeded() .build(); //Now set this config as the default config for your app //This way you can call Realm.getDefaultInstance elsewhere Realm.setDefaultConfiguration(configuration); //Get the instance of this Realm that you just instantiated //And use it to get the Primary Key for the Quote and Category Tables Realm realm = Realm.getInstance(configuration); try { //Attempt to get the last id of the last entry in the Quote class and use that as the //Starting point of your primary key. If your Quote table is not created yet, then this //attempt will fail, and then in the catch clause you want to create a table quotePrimaryKey = new AtomicLong(realm.where(Quote.class).max("id").longValue() + 1); } catch (Exception e) { //All write transaction should happen within a transaction, this code block //Should only be called the first time your app runs realm.beginTransaction(); //Create temp Quote so as to create the table Quote quote = realm.createObject(Quote.class, 0); //Now set the primary key again quotePrimaryKey = new AtomicLong(realm.where(Quote.class).max("id").longValue() + 1); //remove temp quote RealmResultsresults = realm.where(Quote.class).equalTo("id", 0).findAll(); results.deleteAllFromRealm(); realm.commitTransaction(); } try { //Attempt to get the last id of the last entry in the Author class and use that as the //Starting point of your primary key. If your Author table is not created yet, then this //attempt will fail, and then in the catch clause you want to create a table authorPrimaryKey = new AtomicLong(realm.where(Author.class).max("id").longValue() + 1); } catch (Exception e) { //All write transaction should happen within a transaction, this code block //Should only be called the first time your app runs realm.beginTransaction(); //Create temp Author so as to create the table Author author = realm.createObject(Author.class, 0); //Now set the primary key again authorPrimaryKey = new AtomicLong(realm.where(Author.class).max("id").longValue() + 1); //remove temp author RealmResults #5. Mở và đóng Realm InstancesVới SQLite, bạn gọi hàm apply plugin: 'com.android.application' apply plugin: 'realm-android'1 hoặc apply plugin: 'com.android.application' apply plugin: 'realm-android'2 nếu muốn tạo một thể hiện của SQLiteDatabase khi truy xuất cơ sở dữ liệu With Realm, cũng tương tự, bạn gọi apply plugin: 'com.android.application' apply plugin: 'realm-android'3 để khởi tạo phiên bản của Realm Tương tự với SQLite, khi bạn kết thúc việc truy xuất vào cơ sở dữ liệu thì nên đóng nó lại để nhớ giải nén public void onDestroy() { if (!realm.isClosed()) { realm.close(); } super.onDestroy(); } #6. Cách thêm dữ liệu vào Realm database trong AndroidĐể thêm dữ liệu mới vào cơ sở dữ liệu Realm trong Android, bạn sử dụng Realm Managed Object. Để đạt được hiệu quả hơn, các đối tượng này phải được đính kèm trong một giao dịch Ví dụ, đây là cách để lưu một Trích dẫn vào cơ sở dữ liệu apply plugin: 'com.android.application' apply plugin: 'realm-android'0 #7. Truy xuất để lấy dữ liệu từ Realm databaseTruy vấn lấy dữ liệu trong Realm rất đơn giản và hiệu suất cũng rất tốt Để truy vấn trong Realm, chúng ta sử dụng Fluent interface để xây dựng các câu truy vấn với nhiều điều kiện khác nhau. Bạn có thể xây dựng truy vấn lệnh bằng String hoặc sử dụng RealmQuery để xây dựng truy vấn lệnh Kết quả truy vấn lệnh sẽ được trả về dưới dạng apply plugin: 'com.android.application' apply plugin: 'realm-android'4, trong đó apply plugin: 'com.android.application' apply plugin: 'realm-android'5 là một lĩnh vực được quản lý Các đối tượng Realm được chứa trong RealmResult là các đối tượng trực tiếp. Bạn có thể thoải mái đọc các giá trị của bất kỳ đối tượng kỳ lạ nào nhận được. Tuy nhiên, nếu muốn cập nhật thì cần phải thực hiện lại thông tin qua một giao dịch Mình ví dụ đoạn code truy vấn cơ sở dữ liệu để lấy tất cả các quote apply plugin: 'com.android.application' apply plugin: 'realm-android'3 #số 8. Trong kiến trúc MVP thì thao tác với Realm sẽ code như thế nào?Một trong những tính năng mạnh mẽ nhất của Realm database trong Android là tính năng động. Dữ liệu (đối tượng) được tự động cập nhật Nghĩa là khi một dữ liệu (hay nói cách khác là đối tượng) bị thay đổi, nó lập tức được cập nhật vào đĩa và thông báo cho tất cả người nghe của đối tượng đó. Đây lại là một vấn đề khi muốn áp dụng một kiến trúc như MVP khi sử dụng Realm Lý do là mỗi khi cập nhật vào Realm Managed lại cần một giao dịch. Nghĩa là bạn sẽ phải code việc cập nhật này trong Activity hay Fragment. Mà với MVP model, thì người ta lại muốn tách phần Model (thao tác với cơ sở dữ liệu) ra khỏi phần View(Activity/Fragment) Tuy nhiên, is not must be no way. Mình sẽ phải cập nhật các đối tượng thủ công, thông qua các giao diện. Các bạn tham khảo đoạn mã bên dưới apply plugin: 'com.android.application' apply plugin: 'realm-android'4 Với các giao diện trên, đây là cách mình lưu Tác giả vào cơ sở dữ liệu apply plugin: 'com.android.application' apply plugin: 'realm-android'5 Với kiến trúc MVP, tầng View tốt nhất là không cần quan tâm đến phía bên dưới sử dụng SQLite hay Realm. Như thế mới phát huy hết sức mạnh của kiến trúc MVP 🔥 Đọc thêm. Explosion model MVP for setting Android application Cuối cùng, các bạn có thể tham khảo toàn bộ mã nguồn của mình và xem ứng dụng chạy như thế nào nhé. ĐẦY ĐỦ MÃ NGUỒN Như vậy, mình đã hoàn thành bài viết hướng dẫn cơ bản về Realm database trong Android. Hi vọng các bạn sẽ cảm thấy bài viết có ích Nếu có bất kỳ thắc mắc gì thì hãy comment bên dưới nhé Nhận sách Các tính năng nâng cao của Java Java là ngôn ngữ lập trình biến thế giới phổ biến nhất, là hình mẫu của tư tưởng OOP. Nếu bạn muốn bắt đầu với Java thì đây là cuốn sách không thể bỏ qua. Với 63 ví dụ thực thi, cùng với cách viết ngắn gọn dễ hiểu sẽ giúp bạn hiểu rõ bản chất của Java Hiện Amazon đang bán với giá 16$, nhưng với VNTALKING thì miễn phí cho bạn. Còn chờ gì nữa?
liên kết Bài trước Bỏ từ khóa other trong hàm if. Có nên không? Bài tiếp theo 5 lỗi thường gặp khi thiết lập trình Android sơn dương Tên đầy đủ là Dương Anh Sơn. Tốt nghiệp ĐH Bách Khoa Hà Nội. Mình bắt đầu nghiệp coder khi mà ra trường đúng là xin được làm đúng chuyên ngành. Mình tin rằng chỉ có chia sẻ kiến thức mới là cách học tập nhanh nhất. Các bạn góp ý bài viết của mình bằng cách comment bên dưới nhé |