Android Realm相关操作
写了2天的代码,总结一下这两天的一些积累
realm简单来说就是一个可以代替sql的数据库, 特点:易用,快速,跨平台,专业(支持加密,格式化查询,易于移植,支持JSON,流式api,数据变更通知), 可视化
官方网站 https://realm.io/docs/java/latest/ 有需要的朋友,可以去看看
代码:
1、配置
在最外面的那层build.gradle 配置这一段代码
classpath "io.realm:realm-gradle-plugin:5.8.0"
然后在app文件里面的build.gradle 配置这一段代码
apply plugin: 'realm-android'
1、布局
3、代码
3.1创建一个需要保存数据库的类,我写了两个
import io.realm.RealmObject;/*** @author Admin* https://realm.io/docs/java/latest/*/
public class Dog extends RealmObject {String name;String age;String aihao;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getAihao() {return aihao;}public void setAihao(String aihao) {this.aihao = aihao;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age='" + age + '\'' +", aihao='" + aihao + '\'' +'}';}
}
import io.realm.RealmList;
import io.realm.RealmObject;
/*** @author Admin* https://realm.io/docs/java/latest/*/
public class MyRealmDemo extends RealmObject {String userName;String pwd;Long sessionId;private RealmList<Integer> Remarks = new RealmList<>();public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public Long getSessionId() {return sessionId;}public void setSessionId(Long sessionId) {this.sessionId = sessionId;}public RealmList<Integer> getRemarks() {return Remarks;}public void setRemarks(RealmList<Integer> remarks) {Remarks = remarks;}@Overridepublic String toString() {return "MyRealmDemo{" +"userName='" + userName + '\'' +", pwd='" + pwd + '\'' +", sessionId=" + sessionId +", Remarks=" + Remarks.size() +'}';}
}
3.2 创建一个Application,在onCreate里面进行初始化
import io.realm.Realm;
import io.realm.RealmConfiguration;
/*** @author Admin*/
public class MyApplication extends Application {public static RealmConfiguration config;@Overridepublic void onCreate() {super.onCreate();Realm.init(this);config = new RealmConfiguration.Builder().name("myRealm.realm").deleteRealmIfMigrationNeeded().build();Realm.setDefaultConfiguration(config);//配置默认的数据库//setDefaultConfiguration(new RealmConfiguration.Builder().build());
// RealmConfiguration configuration = new RealmConfiguration.Builder().build();}
}
3.3 主界面的实现代码
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;import io.realm.Realm;
import io.realm.RealmAsyncTask;
import io.realm.RealmResults;/*** @author Admin*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {TextView txtShow;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initRealm();txtShow = findViewById(R.id.txt_show);findViewById(R.id.btn_add).setOnClickListener(this);findViewById(R.id.btn_search).setOnClickListener(this);findViewById(R.id.btn_delete).setOnClickListener(this);findViewById(R.id.btn_update).setOnClickListener(this);}Realm realm;Integer index = 0;RealmAsyncTask transaction;private void initRealm() {realm = Realm.getInstance(MyApplication.config);}/*** 升级数据库*/
// class CustomMigration implements RealmMigration {// @Override
// public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {// RealmSchema schema = realm.getSchema();
// Log.e("MainActivity", "oldVersion:" + oldVersion + "----newVersion" + newVersion);
// if (oldVersion == 1 && newVersion == 2) {// RealmObjectSchema personSchema = schema.get("Dog");
//
if (!personSchema.hasField("Dog")) { personSchema.addField("aihao", String.class, FieldAttribute.REQUIRED);
oldVersion++;
}
//
// }
// }
// }private void addRealm() {transaction = realm.executeTransactionAsync(realm -> {MyRealmDemo myDemo = realm.createObject(MyRealmDemo.class);myDemo.setUserName("名字");myDemo.setPwd(index + "");myDemo.getRemarks().add(index);index++;}, () -> {//成功回调Log.e("MainActivity", "成功回调" + index);}, error -> {//失败回调Log.e("MainActivity", "失败");});transaction = realm.executeTransactionAsync(realm -> {Dog dog = realm.createObject(Dog.class);dog.setName("哈士奇");dog.setAge(index + "岁");dog.setAihao("拆家" + index);}, () -> {//成功回调Log.e("MainActivity", "成功回调" + index);}, error -> {//失败回调Log.e("MainActivity", "失败");});}private void updateRealm() {transaction = realm.executeTransactionAsync(realm -> {RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();if (myList != null && myList.size() > 0) {MyRealmDemo myDemo = myList.get(0);myDemo.setUserName("换名字");myDemo.setPwd("小球不得");myDemo.getRemarks().add(index);index++;} else {Log.e("MainActivity", "updateRealm没得东西,改毛线" + index);Toast.makeText(this, "updateRealm没得东西,改毛线", Toast.LENGTH_SHORT).show();}}, () -> {//成功回调Log.e("MainActivity", "成功回调" + index);}, error -> {//失败回调error.printStackTrace();Log.e("MainActivity", "失败" + error.getMessage());});}private void deleteRealm() {transaction = realm.executeTransactionAsync(realm -> {RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();//删除第一个数据myList.get(0).deleteFromRealm();
// myList.deleteFirstFromRealm();
// //删除最后一个数据
// myList.deleteLastFromRealm();
// //删除位置为1的数据
// myList.deleteFromRealm(1);
// //删除所有数据
// myList.deleteAllFromRealm();}, () -> {//成功回调Log.e("MainActivity", "deleteRealm删球了" + index);}, error -> {//失败回调Log.e("MainActivity", "deleteRealm没删拖");});}private void searchRealm() {RealmResults<MyRealmDemo> myList = realm.where(MyRealmDemo.class).findAll();String strText = "";if (myList != null && myList.size() > 0) {for (MyRealmDemo myRealmDemo : myList) {strText += "\n看什么玩意嘛:" + myRealmDemo.toString();Log.e("MainActivity", "看什么玩意嘛:" + myRealmDemo.toString());for (int intNum : myRealmDemo.getRemarks()) {strText += "\n数组里的东西:" + intNum;Log.e("MainActivity", "数组里的东西:" + intNum);}}} else {Log.e("MainActivity", "空的,代码错了,看锤子");}RealmResults<Dog> dogList = realm.where(Dog.class).findAll();for (Dog dog : dogList) {strText += "\n我的狗:" + dog.toString();Log.e("MainActivity", "我的狗:" + dog.toString());}txtShow.setText(strText);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_add://添加addRealm();break;case R.id.btn_search://查询searchRealm();break;case R.id.btn_delete://删除deleteRealm();break;case R.id.btn_update://修改updateRealm();break;default:break;}}@Overrideprotected void onStop() {super.onStop();//取消当前的数据库操作状态if (transaction != null && !transaction.isCancelled()) {transaction.cancel();}}@Overrideprotected void onDestroy() {super.onDestroy();//关闭连接realm.close();}
}
效果图:
源码:
https://github.com/StrangerYang/testRealm
Android Realm相关操作相关推荐
- realm android,Android realm 相关使用教程
一.Realm简介 数据库Realm,是用来替代sqlite的一种解决方案,它有一套自己的数据库存储引擎,比sqlite更轻量级,拥有更快的速度,并且具有很多现代数据库的特性,比如支持JSON,流式a ...
- Android开发相关操作
命令行启动DDMS工具,前提是有这个工具 ~/rustsoftware/adt-bundle-linux-x86_64-20140702/sdk/tools$ ./ddms 查看机器内存情况: adb ...
- 【Android APT】注解处理器 ( Element 注解节点相关操作 )
文章目录 一.获取被 注解 标注的节点 二.Element 注解节点类型 三.VariableElement 注解节点相关操作 四.注解处理器 完整代码示例 五.博客资源 Android APT 学习 ...
- android中关于手机屏幕的相关操作(获取屏幕的宽高等操作)
这里总结下android中关于手机屏幕的相关操作: 1.获取屏幕的分辨率(因为android中处理显示的时候,需要根据屏幕分辨率的不同才去不同的布局或显示不同的素材) <uses-sdk and ...
- Android控制WIFI相关操作
Android控制WIFI相关操作 在XML文件中添加权限: <uses-permission android:name="android.permission.ACCESS_WIFI ...
- Android 图片文件操作、屏幕相关、.9图片的理解
一:Android图片操作 1.存储bitmap到本地文件系统 public static void bitmapToFile(Bitmap bitmap, String uri) {if(!ext ...
- android 控制wifi模块,Android 控制wifi 相关操作实例
Android 控制WIFI相关操作 WIFI的全称是Wireless Fidelity,又称802.11b标准,是一种高速的无线通信协议,传输速度可以达到11Mb/s. 实际上,对WIFI并不需要过 ...
- android Realm 优化
Realm数据库优化 Realm数据的一个特点是支持跨平台操作,且效率上面比较高,是非关系数据库.但是在使用的过程中还是存在很多可以优化的控件,本文章重点解决Realm数据库无表信息和列信息,和Rea ...
- Android Pmem相关介绍
http://fangjian0518.blog.163.com/blog/#m=0 Android Pmem相关介绍 2011-10-18 09:40:26| 分类: Android PMEM | ...
最新文章
- 系统管理员都要知道的 30 个 Linux 系统监控工具
- pythonfor输入多个数字_我一天学会了python最基础的编程
- STL-String源码分析
- Python爬虫(五)
- mysql使用某一列的内容赋值给另外一列,concat()函数
- 成都理工大学c语言复试,2020年成都理工大学信号与信息处理考研真题试卷及试题答案,C语言程序设计考研试题下载...
- 变量是否在数组内c语言,函数内创建的数组在调用后,是否就不存在
- 性能测试oracle瓶颈定位,性能测试中如何定位性能瓶颈
- 怎么设置vscode界面大小_vscode怎么放大界面
- 人脸离线识别模块_人脸识别模块做到市场份额60%,这家AI公司如何用狼性在安防杀开一条血道?...
- Linux之32/64位int、char、int*、char*与空结构体大小
- 创意十足!25个酷炫的服饰行业网站设计
- php 32位检签,php crc32 计算字符串的 32 位 CRC(循环冗余校验)
- \r,\n,\r\n的问题分析
- MySQL在线DDL gh-ost使用说明
- 为软件简单加密的小程序,附源码
- Windows7orServer2008安装VM-Tools
- 甘肃教育杂志甘肃教育杂志社甘肃教育编辑部2022年第15期目录
- C语言编程题:平方数
- 如何用WGDI进行共线性分析(中)