1.build.gradle(Project:xxxx)加入classpath "io.realm:realm-gradle-plugin:2.2.1"
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath "io.realm:realm-gradle-plugin:2.2.1" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }2.build.gradle(Module:app)加入apply plugin: 'realm-android'
apply plugin: 'com.android.application' apply plugin: 'realm-android' android { compileSdkVersion 24 buildToolsVersion "24.0.1" defaultConfig { applicationId "com.terryyamg.realmtest" minSdkVersion 19 targetSdkVersion 24 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.android.support:design:24.2.1' testCompile 'junit:junit:4.12' }3.AndroidManifest.xml的application內加入android:name=".MyApplication"
4.MyApplication.java
package com.terryyamg.realmtest; import android.app.Application; import io.realm.Realm; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // Initialize Realm. Should only be done once when the application starts. Realm.init(this); } }5.MainActivity.java
package com.terryyamg.realmtest; import android.app.Dialog; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import io.realm.Realm; import io.realm.RealmResults; public class MainActivity extends AppCompatActivity { private Realm realm; TextView tvMessage; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); realm = Realm.getDefaultInstance(); tvMessage = (TextView) findViewById(R.id.tvMessage); //Create FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { create(); } }); //Update FloatingActionButton fabUpdate = (FloatingActionButton) findViewById(R.id.fabUpdate); fabUpdate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { update(); } }); //Delete FloatingActionButton fabDelete = (FloatingActionButton) findViewById(R.id.fabDelete); fabDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { delete(); } }); read(); } private void create() { final Dialog dialog = new Dialog(MainActivity.this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.table_dialog); final EditText etName = (EditText) dialog.findViewById(R.id.etName); final EditText etAge = (EditText) dialog.findViewById(R.id.etAge); Button btnSave = (Button) dialog.findViewById(R.id.btnSave); btnSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { int personCount; //PrimaryKey增加 try { personCount = realm.where(Person.class).max("id").intValue() + 1; } catch (Exception e) { personCount = 1; //從1開始 } Log.i("personCount", personCount + ""); // 人 Table Person personC = realm.createObject(Person.class, personCount); personC.setName(etName.getText().toString()); // 輸入姓名 personC.setAge(Integer.parseInt(etAge.getText().toString())); //輸入年齡 /* 公司 Table 測試 */ // Company company1 = realm.createObject(Company.class); // company1.setId(4); // company1.setCompanyName("公司2"); // personC.getCompany().add(company1); // // Company company2 = realm.createObject(Company.class); // company2.setId(5); // company2.setCompanyName("公司3"); // personC.getCompany().add(company2); // // Company company3 = realm.createObject(Company.class); // company3.setId(6); // company3.setCompanyName("公司4"); // personC.getCompany().add(company3); read(); dialog.dismiss(); } }); } }); dialog.show(); } private void read() { /* 公司 Table 測試 */ // RealmResults<Person> person = realm.where(Person.class).equalTo("company.companyName", "公司2").equalTo("company.companyName", "公司1").findAll(); RealmResults<Person> person = realm.where(Person.class).findAll(); String message = ""; Log.i("person.size()",person.size()+""); for (int i = 0; i < person.size(); i++) { message += person.get(i).getName() + " - " + person.get(i).getAge() + "\n"; /* 公司 Table 測試 */ // Log.i("getCompany.size()",person.get(i).getCompany().size()+""); // for(int j = 0; j <person.get(i).getCompany().size();j++) { // message += person.get(i).getName() + " - " + person.get(i).getAge() + ":" + person.get(i).getCompany().get(j).getCompanyName() + "\n"; // } } tvMessage.setText(message); } private void update() { final Dialog dialog = new Dialog(MainActivity.this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.table_dialog); final EditText etName = (EditText) dialog.findViewById(R.id.etName); final EditText etAge = (EditText) dialog.findViewById(R.id.etAge); Button btnSave = (Button) dialog.findViewById(R.id.btnSave); btnSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { //修改第一筆 Person person = realm.where(Person.class).equalTo("id", 1).findFirst(); person.setName(etName.getText().toString()); person.setAge(Integer.parseInt(etAge.getText().toString())); read(); dialog.dismiss(); } }); } }); dialog.show(); } private void delete() { final RealmResults<Person> results = realm.where(Person.class).findAll(); realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { //刪除某一筆 // Person p = results.get(1); // p.deleteFromRealm(); //刪除第一筆 // results.deleteFirstFromRealm(); //刪除最後一筆 // results.deleteLastFromRealm(); //刪除全部 results.deleteAllFromRealm(); } }); read(); } }6.Person.java
package com.terryyamg.realmtest; import io.realm.RealmList; import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; public class Person extends RealmObject{ @PrimaryKey private int id; private String name; private int age; private RealmList<Company> company; public void setId(int id){ this.id = id; } public int getId(){ return id; } public void setName(String name){ this.name = name; } public String getName(){ return name; } public void setAge(int age){ this.age = age; } public int getAge(){ return age; } public void setCompany(RealmList<Company> company){ this.company = company; } public RealmList<Company> getCompany(){ return company; } }7.Company.java
package com.terryyamg.realmtest; import io.realm.RealmObject; public class Company extends RealmObject{ private int id; private String companyName; public void setId(int id){ this.id = id; } public int getId(){ return id; } public void setCompanyName(String companyName){ this.companyName = companyName; } public String getCompanyName(){ return companyName; } }8./res/layout/activity_main.xml
9./res/layout/content_main.xml
10./res/layout/table_dialog.xml
參考資料:
https://realm.io/docs/java/latest/#getting-started
檔案下載:
https://github.com/terryyamg/RealmTest