上一篇我们讲述了如何配置realm,本篇博客我们将开启realm代码之旅。
俗话说,无图无真相嘛,一言不合就上图:
再看看我们上篇博客中说到的用chrome查看realm数据库内容:
So,我们来看看代码吧:
1、新建两个model类,Person和Pet,继承自RealmObject。
Person类:
public class Person extends RealmObject {
@PrimaryKey
private String cardId;
private String name;
private String sex;
private RealmList<Pet> pets;
public RealmList<Pet> getPets() {
return pets;
}
public void setPets(RealmList<Pet> pets) {
this.pets = pets;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
Pet类:
public class Pet extends RealmObject{
@PrimaryKey
private String name;
private String sex;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
2、数据库基本操作:增删改查。另外,为了项目代码更加简短,这里还使用了Butterknife,如何配置可以查看这篇博客:http://blog.csdn.net/code_better/article/details/52491175
首先,我们实现查:
/**
* 初始化,加载数据
*/
private void init() {
persons = new ArrayList<>();
//查询Person表中所有的行
RealmResults<Person> results = realm.where(Person.class).findAll();
if (results == null)
return;
//将查询结果加到链表中
for (Person person : results) {
persons.add(person);
}
adapter = new PersonAdapter(context, persons);
lvPerson.setAdapter(adapter);
}
然后,添加一个新的用户:
@OnClick(R.id.bt_add_person)
public void onViewClicked() {
final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog_add_person, null);//获取自定义布局
dialog.setView(layout);
final EditText et_name = (EditText) layout.findViewById(R.id.et_name);
final EditText et_sex = (EditText) layout.findViewById(R.id.et_sex);
final EditText et_card_id = (EditText) layout.findViewById(R.id.et_type);
Button bt_sure = (Button) layout.findViewById(R.id.bt_sure);
bt_sure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String name = et_name.getText().toString().trim();
String sex = et_sex.getText().toString().trim();
String cardId = et_card_id.getText().toString().trim();
try {
//我们可以先创建一个普通的person对象,处理完后再拷贝进realm
Person person = new Person();
person.setName(name);
person.setSex(sex);
person.setCardId(cardId);
//保存到数据库中
realm.beginTransaction();//开始事务
//此时如果返回的person对象,将会对数据库内容产生影响
person = realm.copyToRealm(person);
realm.commitTransaction();//提交事务
persons.add(person);
} catch (Exception e) {
realm.cancelTransaction();
}
//另一种方式
// realm.beginTransaction();//开始事务
// //操作该对象将直接对数据库内容产生影响
// person2 = realm.createObject(Person.class);
// person2.setName(name);
// person2.setSex(sex);
// person2.setCardId(cardId);
// realm.commitTransaction();//提交事务
}
});
dialog.show();
}
删除用户:
private void showDeleteDialog(final Person person) {
AlertDialog.Builder dialog = new AlertDialog.Builder(context)
.setTitle("删除")
.setMessage("删除 " + person.getName() + " ?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
persons.remove(person);
realm.beginTransaction();
person.deleteFromRealm();
realm.commitTransaction();
adapter.notifyDataSetChanged();
}
})
.setNegativeButton("取消", null);
dialog.show();
}
这里,我们需要注意,增加和删除都必须只能在realm的事务中,也就是说,我们必须在写数据库时先执行realm.beginTransaction();写完之后执行realm.commitTransaction();否则将会抛出异常。
项目下载地址:http://download.csdn.net/detail/zengxyuyu/9848370
运行里面的realmtest这个moudle