編輯:關於Android編程
如果你比較關心android開發的最新動態的話,那麼你肯定會聽說過Realm,Realm是一個輕量級的數據庫,在Android開發中,它可以替代SQLite和ORM框架。
和SQLite相比,Realm速度更快並且它有很多先進的特性,例如對JSON的支持,流暢的API,數據變化通知(觀察者),加密支持… 所有的這一切都會讓android開發者日子過得更潇灑(這裡扯淡了,開發者日子怎麼可能潇灑,當然也可能是國內外不同…)。
這篇文章的主題就是Realm for Android, 在這篇文章中,我將使用Realm v0.84.1。
要在Android項目中使用Realm, 你需要在module的build.gradle文件中添加如下代碼:
compile 'io.realm:realm-android:0.84.1'
一個Realm和SQLite比較類似。它有一個文件和他作為關聯,這個文件一次創建,就會永久存在Android系統中。
想要創建一個Realm, 你可以在任意一個Activity
中調用靜態方法Realm.getInstance
。
Realm myRealm = Realm.getInstance(context);
需要注意的是,我們這樣創建,沒有給它指定RealmConfiguration
,這時候創建的文件會使用默認的文件名default.realm。
如果你需要創建另外一個Realm,那你就必須要給它傳遞RealmConfiguration.Builder
了,並且要給它指定一個唯一的名稱。
Realm myOtherRealm =
Realm.getInstance(
new RealmConfiguration.Builder(context)
.name(myOtherRealm.realm)
.build()
);
如果一個javabean繼承了RealmObject
,那麼它就可以用來存儲Realm,如果你想知道什麼是javabean,來看看這裡的定義:javabean是可序列化的,有一個默認的構造方法,成員變量都提供getter和setter方法。例如,下面的代碼可以輕松的保存到Realm中,
public class Country extends RealmObject {
private String name;
private int population;
public Country() { }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPopulation() {
return population;
}
public void setPopulation(int population) {
this.population = population;
}
}
可以使用@PrimaryKey
注解來表示這個一個成員變量是Realm的主鍵。例如下面的代碼是將code
字段作為主鍵,
@PrimaryKey
private String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
你將會在下面的代碼中發現,使用Realm查詢數據非常簡單, 寫入數據稍稍麻煩點。Realm遵循ACID以保證操作的原子性和一致性。在Realm中,所有的寫操作都會在一個事務中。
使用beginTransaction
方法可以開啟一個事務,使用commitTransaction
方法去提交一個事務。下面的代碼表明如何創建並保存一個Country
,
myRealm.beginTransaction();
// Create an object
Country country1 = myRealm.createObject(Country.class);
// Set its fields
country1.setName(Norway);
country1.setPopulation(5165800);
country1.setCode(NO);
myRealm.commitTransaction();
你可能已經注意到了,country1
對象並不是使用Country
的構造方法創建的,想讓RealmObject
保存這個實例, 就必須使用createObject
方法創建。
如果你必須要使用構造方法的話,別忘了在提交事務之前調用copyToRealm
方法將對象關聯到Realm
上,例如:
// Create the object
Country country2 = new Country();
country2.setName(Russia);
country2.setPopulation(146430430);
country2.setCode(RU);
myRealm.beginTransaction();
Country copyOfCountry2 = myRealm.copyToRealm(country2);
myRealm.commitTransaction();
Realm提供了一套非常直觀簡單的API用來查詢操作,調用Realm
的where
方法,並且將你需要的類的class傳遞進去, 你就完成了一個查詢的創建,之後, 你可以調用findAll
方法來遍歷所有的數據,返回的數據保存在RealmResults
對象中,下面的例子,我們查詢出來並且打印了所有的Country
RealmResults results1 =
myRealm.where(Country.class).findAll();
for(Country c:results1) {
Log.d(results1, c.getName());
}
// Prints Norway, RussiaRealmResults results1 =
myRealm.where(Country.class).findAll();
for(Country c:results1) {
Log.d(results1, c.getName());
}
// Prints Norway, Russia
除此之外, 你還可以使用beginsWith
,endsWith
,lesserThan
和greaterThan
方法來過濾結果,下面的例如展示了如何使用greaterThan
方法來查詢所有的population
大於1億的Country
,
RealmResults results2 =
myRealm.where(Country.class)
.greaterThan(population, 100000000)
.findAll();
// Gets only Russia
如果你想讓查詢結果按照某個順序來,你可以使用findAllSorted
方法,它有一個String類型的參數和一個boolean類型的參數,其中,String指定用來排序的字段,boolean指定了排序方式,
// Sort by name, 降序排列
RealmResults results3 =
myRealm.where(Country.class)
.findAllSorted(name, false);
// Gets Russia, Norway
綜述Android中的事件分發機制也就是View與ViewGroup的對事件的分發與處理。在ViewGroup的內部包含了許多View,而ViewGroup繼承自View
在android應用的開發過程中,經常會出現啟動一個界面後填寫部分內容後帶著數據返回啟動前的界面,最典型的應用就是登錄過程。在很多應用程序的模塊中,都有“我的”這個模塊,
這是谷歌官方給我們提供的一個兼容低版本安卓設備的軟件包,裡面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一利用它,我們可以做很多事情,從最簡
概述:之前我聽到過一則新聞,就是說Ipone中的AssistiveTouch的設計初衷是給殘疾人使用的。而這一功能在亞洲(中國)的使用最為頻繁。雖不知道這新聞的可靠性,但