"android in a box,ObjectBox在Android Studio中的使用

提要

ObjectBox版本: v2.3.1( 2019/01/08)

Android Studio版本: 3.3

ObjectBox由greenrobot开发,其他产品有GreenDao、EventBus。ObjectBox是基于noSql的ORM数据库, 支持表关系的定义以及事务的处理, 在性能上官网称优于对比测试的所有嵌入型数据库5-15倍。

1.集成方法

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

ext.objectboxVersion = '2.3.1'

repositories {

google()

jcenter()

maven { url "http://objectbox.net/beta-repo/" }

}

dependencies {

classpath 'com.android.tools.build:gradle:3.3.0'

//ObjectBox

classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"

// NOTE: Do not place your application dependencies here; they belong

// in the individual module build.gradle files

}

}

allprojects {

repositories {

google()

jcenter()

maven { url "http://objectbox.net/beta-repo/" }

}

}

task clean(type: Delete) {

delete rootProject.buildDir

}

②在app Model里的build.gradle文件里添加插件

apply plugin: 'com.android.application'

apply plugin: 'io.objectbox'

......

......

dependencies {

//ObjectBox

annotationProcessor "io.objectbox:objectbox-processor:$objectboxVersion"

//正式版

implementation "io.objectbox:objectbox-android:$objectboxVersion"

}

此时需要先立刻同步一下项目,点击Sync Now下载依赖文件

使用方法

添加一个Bean类,使用@Entity注解, 进行表映射

/**

* id必须使用使用注解 @Id,表示自增长

* 如需手动管理应该用 @Id(assignable = true)

* 不需要写get、set方法,否则会报错

* 变量用public修饰符,总之我用private 时Build会报错

*/

@Entity

public class UserEntity {

@Id

public long id;

public String name;

public String age;

}

完成以上步骤后,请点击Build→Make Project,这样MyObjectBox就自动生成了。

把ObjectBox对象单例并实例化, 一般放在application的onCreate()中

public class MyApplication extends Application{

private static BoxStore mBoxStore;

@Override

public void onCreate() {

mBoxStore = MyObjectBox.builder().androidContext(this).build();

if (BuildConfig.DEBUG) {

new AndroidObjectBrowser(mBoxStore).start(this);

}

XLog.e("App===", "Using ObjectBox :" + BoxStore.getVersion() + " (" + BoxStore.getVersionNative() + ")");

}

public BoxStore getBoxStore() {

return mBoxStore;

}

}

4.此时可以通过Box对象来针对这张表做增删改查了(put, get, remove, query)。

Box beanBox= ((MyApplication) getApplication()).boxFor(UserEntity.class).build();

//新增和修改,put 的参数可以是 list

beanBox.put(bean);

//删除 id 为 2 的数据

beanBox.remove(2);

//查询,名字为 T 开头或者 age为 10 的数据

List item = beanBox.query()

.startsWith(UserEntity_.name,"T")

.or().equal(UserEntity_.age,"10").build().find();

//查询时,用到了生成类 UserEntity_通常是实体类加一个下划线。使用 builder.equal() 进行设置匹配,调用 startWith() 设置查询条件,find() 可以用于分页。

数据库升级

首先,在要修改的字段添加 @Uid 注解。

然后 Build -> Make Project,

此时就可以直接修改字段的名称

官方有这样一个提示,假如需要插入或修改多条数据,可以这样做:

for(User user: allUsers) {

modify(user); // modifies properties of given user

box.put(user);

}

//但这种做法可能会需要较多的时间、花费更多的性能,正确做法

for(User user: allUsers) {

modify(user); // modifies properties of given user

}

box.put(allUsers);

调试

apply plugin: 'com.android.application'

//apply plugin: 'io.objectbox' //注释此行

dependencies {

//ObjectBox

annotationProcessor "io.objectbox:objectbox-processor:$objectboxVersion"

//调试 api

debugImplementation "io.objectbox:objectbox-android-objectbrowser:$objectboxVersion"

releaseImplementation "io.objectbox:objectbox-android:$objectboxVersion"

}

清单文件申请权限

重新Build运行后, 就可以从设备的通知栏点击进入查看数据库, 通过在cmd中输入adb forward tcp:8090 tcp:8090, 打开浏览器, 输入http://localhost:8090/index.html 网址即可查看数据库信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分析一下这个json {"name":"12312","project_id":"87156","project_name":"上上下下左左右右baba与聚法科技(长春)有限公司与公司、证券、保险、票据等有关的民事纠纷","client":"[{"type":"自然人","customer_id":"80236","customer_name":"上上下下左左右右baba"}]","sign_date":"2023-06-06","expire_date":"2023-06-21","subject_amount":"123","contract_amount":"123","charge_method":"一次性,分阶段,风险,计时","equity_amount":"13811","amount_info":"[{"type":"一次性","pay_date":"2023-07-03","charge_amount":"12"},{"type":"分阶段","pay_date":"2023-06-13","charge_amount":"123","is_satisfy":"是","pay_condition":"12312"},{"type":"风险","pay_date":"","charge_amount":"","is_satisfy":"是","pay_condition":"123","basic_amount":"123","risk_amount":"12","object_amount":"123123","object":"赔偿金","risk_prop":"13213","member":"","rate":"","hours":""},{"type":"计时","member_id":"392159","member":"曹野","rate":"11","hours":"1231"}]","seal_person":"123","seal_type":"律所公章,法人名章,财务章","seal_num":"123","file_path":"[{"title":"导入错误数据 (15).xls","path":"382585/1686381522542/导入错误数据 (15).xls","size":"91136"},{"title":"3.txt","path":"382585/1686561731102/3.txt","size":44078}]","remark":"123123"} 并使用php转换成字符串
06-13
这是一个包含多个键值对的 JSON 对象。其包括合同的一些基本信息,如名称、项目 ID、签订日期、到期日期、合同金额、收费方式、盖章人、盖章类型、盖章数量、文件路径和备注等。其一些键的值是 JSON 数组,需要进一步解析。 以下是将该 JSON 对象转换成字符串的 PHP 代码: ```php $json = '{"name":"12312","project_id":"87156","project_name":"上上下下左左右右baba与聚法科技(长春)有限公司与公司、证券、保险、票据等有关的民事纠纷","client":"[{"type":"自然人","customer_id":"80236","customer_name":"上上下下左左右右baba"}]","sign_date":"2023-06-06","expire_date":"2023-06-21","subject_amount":"123","contract_amount":"123","charge_method":"一次性,分阶段,风险,计时","equity_amount":"13811","amount_info":"[{"type":"一次性","pay_date":"2023-07-03","charge_amount":"12"},{"type":"分阶段","pay_date":"2023-06-13","charge_amount":"123","is_satisfy":"是","pay_condition":"12312"},{"type":"风险","pay_date":"","charge_amount":"","is_satisfy":"是","pay_condition":"123","basic_amount":"123","risk_amount":"12","object_amount":"123123","object":"赔偿金","risk_prop":"13213","member":"","rate":"","hours":""},{"type":"计时","member_id":"392159","member":"曹野","rate":"11","hours":"1231"}]","seal_person":"123","seal_type":"律所公章,法人名章,财务章","seal_num":"123","file_path":"[{"title":"导入错误数据 (15).xls","path":"382585/1686381522542/导入错误数据 (15).xls","size":"91136"},{"title":"3.txt","path":"382585/1686561731102/3.txt","size":44078}]","remark":"123123"}'; $data = json_decode(str_replace('"', '"', $json), true); $str = ''; foreach ($data as $key => $value) { if (is_array($value)) { $value = json_encode($value); } $str .= $key . ':' . $value . ','; } $str = '{' . rtrim($str, ',') . '}'; echo $str; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值