精华内容
下载资源
问答
  • Realm学习

    2016-09-06 10:54:53
    Android数据库Realm学习(一)基本使用 Realm for Android快速入门教程 Realm Android简单使用说明 realm官方文档http://www.jianshu.com/p/a506ee4afecb错误记录 1. 同时引用ButterKnife和Realm编译时可能会...


    Android数据库Realm学习(一)基本使用
    Realm for Android快速入门教程
    Realm Android简单使用说明
    realm官方文档

    http://www.jianshu.com/p/a506ee4afecb

    错误记录
    1. 同时引用ButterKnife和Realm编译时可能会出现下述错误:

    Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
    
    com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/services/javax.annotation.processing.Processor
    File1: C:\Users\Администратор.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife\7.0.1\d5d13ea991eab0252e3710e5df3d6a9d4b21d461\butterknife-7.0.1.jar
    File2: C:\Users\Администратор.gradle\caches\modules-2\files-2.1\io.realm\realm-android\0.86.0\e49a43bcbbc3d5e5491dd2f4d3799a504b618e6b\realm-android-0.86.0.jar

    从stackoverflow看到解决方案,在gradle文件中做如下配置:

    packagingOptions {
    exclude 'META-INF/services/javax.annotation.processing.Processor' 
    }

    这里记录下,方便大家排查
    2.

    Gson gson = new GsonBuilder()  
      .setExclusionStrategies(new ExclusionStrategy() {  
        // This is required to make Gson work with RealmObjects  
        @Override public boolean shouldSkipField(FieldAttributes f) {  
          return f.getDeclaringClass().equals(RealmObject.class);  
        }  
    
        @Override public boolean shouldSkipClass(Class<?> clazz) {  
          return false;  
        }  
      }).create();  

    Realm创建
    1. 第一步realm每个activity使用都需要初始化,直接在application中初始化他

    public class MyApplication extends Application {
      @Override
      public void onCreate() {
        super.onCreate();
        // The realm file will be located in Context.getFilesDir() with name "default.realm"
        RealmConfiguration config = new RealmConfiguration.Builder(this).build();
        Realm.setDefaultConfiguration(config);
      }
    }
    
    public class MyActivity extends Activity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Realm realm = Realm.getDefaultInstance();
        // ... Do something ...
        realm.close();
      }
    }
        //添加一条数据到数据库  
            private void realmInsert(Realm realm) {  
                realm.beginTransaction();//必须先开启事务  
                Book book = realm.createObject(Book.class);  
                book.setAuthor("司马迁");  
                book.setName("史记");  
                realm.commitTransaction();//提交事务  
                book = realm.where(Book.class).findFirst();  
            }  
    //查询一个数据库中第一个book  
            Book book = realm.where(Book.class)  
                    .equalTo("name","史记")//相当于where name='史记'  
                    .or()//或,连接查询条件;没有这个方法时,默认是隐式地被逻辑和(&)组合  
                    .equalTo("author","司马迁")//相当于 author='司马迁'  
                    .findFirst();  
        private void realmUpdate(Realm realm){  
                realm.beginTransaction();//开启事务  
                Book b = new Book();//新建实例  
                b.setId(1);//book类新加的int属性,用@PrimaryKey注解作为主键  
                b.setAuthor("simaqian");  
                b.setName("史记");  
                realm.copyToRealmOrUpdate(b);//修改操作  
                realm.commitTransaction();//提交事务  
            }  
    realm.executeTransaction(new Realm.Transaction(){
                            @Override
                            public void execute(Realm realm) {
                                RealmResults<GankDataBean>results = realm.where(GankDataBean.class).equalTo("type", mType).findAll();
                                results.clear();
                            }
                        });
    展开全文
  • Realm学习笔记

    2017-04-14 16:12:45
    Realm学习笔记

    Realm 用法学习地址

    1 Realm不支持内部类


    Realm和GSON可以无缝的配合使用。


    3  Realm库升级的方法:

    1. 创建迁移类

      1. // 迁移类示例
      2. public class MyMigration implements RealmMigration{
      3. @Override
      4. public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
      5. // DynamicRealm 暴露了一个可编辑的schema
      6. RealmSchema schema = realm.getSchema();
      7. // 迁移到版本 1 : 添加一个新的类
      8. // 示例:
      9. // public Person extends RealmObject {
      10. // private String name;
      11. // private int age;
      12. // // getters and setters left out for brevity
      13. // }
      14. if (oldVersion == 0) {
      15. schema.create("Person")
      16. .addField("name", String.class)
      17. .addField("age", int.class);
      18. oldVersion++;
      19. }
      20. // 迁移到版本 2 :添加一个primary key + 对象引用
      21. // 示例:
      22. // public Person extends RealmObject {
      23. // private String name;
      24. // @PrimaryKey
      25. // private int age;
      26. // private Dog favoriteDog;
      27. // private RealmList<Dog> dogs;
      28. // // getters and setters left out for brevity
      29. // }
      30. if (oldVersion == 1) {
      31. schema.get("Person")
      32. .addField("id", long.class, FieldAttribute.PRIMARY_KEY)
      33. .addRealmObjectField("favoriteDog", schema.get("Dog"))
      34. .addRealmListField("dogs", schema.get("Dog"));
      35. oldVersion++;
      36. }
      37. }
      38. }
    2. 使用Builder.migration升级数据库

      将版本号改为2,当Realm发现新旧版本号不一致时,会自动使用该迁移类完成迁移操作。

      1. RealmConfiguration config = new RealmConfiguration.Builder()
      2. .schemaVersion(2) // 在schema改变后,必须进行升级
      3. .migration(new MyMigration()) // 开始迁移
      4. .build()

    4 不能直接使用查询出来的对象类

    我们得到了一个符合查询条件的对象列表的引用,但是如果我们直接操作,对象将会是原始的对象。所以,还是复制一份吧。

    1. ArrayList array = realm. copyFromRealm(result2);

    展开全文
  • Realm学习总结

    2017-07-20 14:13:00
    参考博客: http://www.jianshu.com/p/096bec929f2a ... 参考的博客介绍很详细,我就不写了..写了一个简单的学习的demo. GitHub地址:https://github.com/PengSiSi/RealmDemo 代码如下: // // V...

    参考博客:

    http://www.jianshu.com/p/096bec929f2a

    http://www.cnblogs.com/ilyy/p/5648051.html

    参考的博客介绍很详细,我就不写了..写了一个简单的学习的demo.

    GitHub地址: https://github.com/PengSiSi/RealmDemo


     

    代码如下:

     

    //
    //  ViewController.m
    //  RealmDemo
    //
    //  Created by 思 彭 on 2017/7/20.
    //  Copyright © 2017年 思 彭. All rights reserved.
    
    // 注意区别默认的和自己自定义realm的
    
    #import "ViewController.h"
    #import "PersonModel.h"
    #import <Realm.h>
    #import <RLMRealm.h>
    
    @interface ViewController () {
        
        RLMRealm *_customRealm;
    }
    
    @property (weak, nonatomic) IBOutlet UITextField *nameTextField;
    @property (weak, nonatomic) IBOutlet UITextField *sexTextField;
    @property (weak, nonatomic) IBOutlet UITextField *ageTextField;
    
    @property (nonatomic, strong) RLMResults *locArray;
    @property (nonatomic, strong) RLMNotificationToken *token;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    //    可以使用默认的
    //    _customRealm = [RLMRealm defaultRealm];
        
        //自己创建一个新的RLMRealm
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *pathStr = paths.firstObject;
        // pathStr = /Users/sipeng/Library/Developer/CoreSimulator/Devices/59E51096-9523-4845-84E8-2BB5360FB50E/data/Containers/Data/Application/A20B045E-6C86-4872-99DF-A52541FB1104/Documents
    
        NSLog(@"pathStr = %@",pathStr);
        _customRealm = [RLMRealm realmWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",pathStr,@"person.realm"]]];
    }
    
    /**
     增
    
     @param sender <#sender description#>
     */
    - (IBAction)addAction:(id)sender {
        
        // 获取默认的 Realm 实例
    //    RLMRealm *realm = [RLMRealm defaultRealm];
        
        PersonModel *person = [[PersonModel alloc]init];
        person.name = self.nameTextField.text;
        person.sex = self.sexTextField.text;
        person.age = [self.ageTextField.text integerValue];
        NSLog(@"name - %@ sex = %@ age = %ld",person.name, person.sex, person.age);
        // 数据持久化
        [_customRealm transactionWithBlock:^{
            [_customRealm addObject:person];
        }];
        // 通过事务将数据添加到 Realm 中
    //    [_customRealm beginWriteTransaction];
    //    [_customRealm addObject:person];
    //    [_customRealm commitWriteTransaction];
        NSLog(@"增加成功啦");
        [self findAction:nil];
    }
    
    /**
     删
    
     @param sender <#sender description#>
     */
    - (IBAction)deleteAction:(id)sender {
        
        // 获取默认的 Realm 实例
    //    RLMRealm *realm = [RLMRealm defaultRealm];
        [_customRealm beginWriteTransaction];
        [_customRealm deleteAllObjects];
        [_customRealm commitWriteTransaction];
        [self findAction:nil];
    }
    
    /**
     改
    
     @param sender <#sender description#>
     */
    - (IBAction)updateAction:(id)sender {
        
        for (PersonModel *person in self.locArray) {
            NSLog(@"name - %@ sex = %@ age = %ld",person.name, person.sex, person.age);
        }
        
        // 获取默认的 Realm 实例
    //    RLMRealm *realm = [RLMRealm defaultRealm];
        PersonModel *model = self.locArray[0];
        [_customRealm beginWriteTransaction];
        model.name = @"思思棒棒哒";
        [_customRealm commitWriteTransaction];
        
        NSLog(@"修改成功");
        for (PersonModel *person in self.locArray) {
            NSLog(@"name - %@ sex = %@ age = %ld",person.name, person.sex, person.age);
        }
    }
    
    /**
     查
    
     @param sender <#sender description#>
     */
    - (IBAction)findAction:(id)sender {
        
        //自己创建一个新的RLMRealm
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *pathStr = paths.firstObject;
        NSLog(@"pathStr = %@",pathStr);
    
        // 查询指定的 Realm 数据库
        RLMRealm *personRealm = [RLMRealm realmWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",pathStr,@"person.realm"]]];
        // 获得一个指定的 Realm 数据库
        self.locArray = [PersonModel allObjectsInRealm:personRealm]; // 从该 Realm 数据库中,检索所有model
        
        // 这是默认查询默认的realm
    //    self.locArray = [PersonModel allObjects];
        NSLog(@"self.locArray.count = %ld",self.locArray.count);
    }
    
    // 创建数据库
    - (void)creatDataBaseWithName:(NSString *)databaseName{
        
        NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *path = [docPath objectAtIndex:0];
        NSString *filePath = [path stringByAppendingPathComponent:databaseName];
        NSLog(@"数据库目录 = %@",filePath);
        
        RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
        config.fileURL = [NSURL URLWithString:filePath];
    //    config.objectClasses = @[MyClass.class, MyOtherClass.class];
        config.readOnly = NO;
        int currentVersion = 1.0;
        config.schemaVersion = currentVersion;
        
        config.migrationBlock = ^(RLMMigration *migration , uint64_t oldSchemaVersion) {       // 这里是设置数据迁移的block
            if (oldSchemaVersion < currentVersion) {
            }
        };
        
        [RLMRealmConfiguration setDefaultConfiguration:config];
    }
    
    @end

     

    转载于:https://www.cnblogs.com/pengsi/p/7210981.html

    展开全文
  • Android数据库Realm学习(一)基本使用 Realm Java文档  技术文档,开卷有益 刚刚开始用Realm,肯定是要对比着SQLite来琢磨的,说几个个人认识: 一、SQLite中的数据库名对应Realm的啥 Realm可以简单...

    Android数据库Realm学习(一)基本使用


    Realm Java文档   技术文档,开卷有益

    刚刚开始用Realm,肯定是要对比着SQLite来琢磨的,说几个个人认识:

    一、SQLite中的数据库名对应Realm的啥

    Realm可以简单直接使用,这个时候似乎是弱化了数据库名的存在,也就是这个时候的数据库文件是默认的default.realm。弱化不代表不用,在实现RealmConfiguration时,通过如下代码new RealmConfiguration.Builder(context).name("myrealm.realm")来控制和指定名字

     

    二、表名去了哪里?

    这个开始也会有点纠结,就是转不过来这个思维。

    继承RealmObject的类也可以理解为一张张表的类。这个应该是在实体类和数据库的表结构之间做了个平衡,一个很惊喜的平衡。虽然也带了一个问题:加到gettersetter的任何自定义逻辑实际上并不会被执行。

     

    三、有没有再次封装的必要性?

    这个不确定,应该有,但是像查询来说,realm的实现已经够简单了,封装感觉鸡肋点。

     


    接下来开始使用了    

    1.在modulegradle中添加compile 'io.realm:realm-android:0.87.5'

    2.随便搞个什么类,但是要继承RealmObject

    例如我声明个Book.class,包括nameauthor两条私有属性,原因如下:


    3.然后再activity里面使用realm

    本来可以这样的

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. realm = Realm.getInstance(this);  


    但是,为了后续学习也为了不装X,先配置个RealmConfiguration好了。

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. <RealmConfiguration configuration = new RealmConfiguration.Builder(this)  
    2.                 .name("test.realm")//配置名字  
    3.                 .encryptionKey(new byte[64])//加密用字段,不是64位会报错  
    4.                 .schemaVersion(2)//版本号  
    5. //                .setModules(xxxx)//不懂  
    6. //                .migration(xxxx)//不懂  
    7. //                .inMemory()//设置后会放在缓存中  
    8.                 .build();  
    9.         realm = Realm.getInstance(configuration);  

    注意:不同的activity使用同一个.realm文件时配置必须相同;

              所有操作都必须在事务内执行;


    具体操纵:

    ①增

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. //添加一条数据到数据库  
    2.     private void realmInsert(Realm realm) {  
    3.         realm.beginTransaction();//必须先开启事务  
    4.         Book book = realm.createObject(Book.class);  
    5.         book.setAuthor("司马迁");  
    6.         book.setName("史记");  
    7.         realm.commitTransaction();//提交事务  
    8.         book = realm.where(Book.class).findFirst();  
    9.     }  

    ②查

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. //查询一个数据库中第一个book  
    2.         Book book = realm.where(Book.class)  
    3.                 .equalTo("name","史记")//相当于where name='史记'  
    4.                 .or()//或,连接查询条件;没有这个方法时,默认是隐式地被逻辑和(&)组合  
    5.                 .equalTo("author","司马迁")//相当于 author='司马迁'  
    6.                 .findFirst();  
    7.         //整体相当于select * from (test.realm) where name='史记' or author='司马迁' limit 1;  
    8.         //Book book = realm.where(Book.class).findFirst();  


    Realm的查询也是支持排序的,但是它的处理是在查询出结果后再进行排序。

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. RealmResults<Book> result = realm.where(Book.class).findAll();  
    2. //Result.sort(“name”);  
    3. Result.sort(“name”,Sort.DESCENDING);</span>  

    注意:目前并不是支持所有字符集


    ③改

    修改之前要确定一件事,你的model中有@PrimaryKey约束的主键,

    否则


    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. private void realmUpdate(Realm realm){  
    2.         realm.beginTransaction();//开启事务  
    3.         Book b = new Book();//新建实例  
    4.         b.setId(1);//book类新加的int属性,用@PrimaryKey注解作为主键  
    5.         b.setAuthor("simaqian");  
    6.         b.setName("史记");  
    7.         realm.copyToRealmOrUpdate(b);//修改操作  
    8.         realm.commitTransaction();//提交事务  
    9.     }  

    修改还有一种方式,好像还是realm提倡和鼓励的方式,就是直接对查询到的结果修改,然后该修改就会反馈回数据库,例如:

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. private void realmUpdate(Realm realm){  
    2.         realm.beginTransaction();  
    3. //        Book b = new Book();  
    4. //        b.setId(1);  
    5. //        b.setAuthor("simaqian");  
    6. //        b.setName("史记");  
    7. //        realm.copyToRealmOrUpdate(b);  
    8.         realm.where(Book.class).findFirst().setAuthor("斯巴达");  
    9.         realm.commitTransaction();  
    10.         realmSelect(realm);  
    11.     }  

    感觉还是查询出来复制一份使用比较好。。。

    ④删

    删除和修改一样,你的model中有@PrimaryKey约束的主键

    [java] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. private void realmDelete(Realm realm){  
    2.         realm.beginTransaction();  
    3.         RealmResults results = realm.where(Book.class).findAll();  
    4.         //方式一:按下标删除  
    5.         results.remove(1);  
    6.         方式二:删除指定model第一种  
    7.         //Book book = new Book();  
    8.         //book.setId(2);  
    9.         //book.setName("史记");  
    10.         //book.setAuthor("司牛迁");  
    11.         //results.remove(book);  
    12.         //方式三:删除指定model第一种  
    13.         //book.removeFromRealm();  
    14.         方式四:删除末尾一个  
    15.         //results.removeLast();  
    16.         方式wu:清除全部  
    17.         //results.clear();  
    18.         realm.commitTransaction();  
    19.     }  
    转载自:http://blog.csdn.net/shareye1992/article/details/50789216

    更多学习参考Realm官网
    展开全文
  • 最新的高效 易上手的app数据库realm 学习 什么也不要说,直接上官网 ,https://realm.io/cn/ 还有中文版,从介绍到使用,问题解决等十分详细。请以官网为准 Realm 大部分代码都是开源的,但是其强大功能取决...
  • 1、Realm简介 2、环境配置 3、在Application中初始化Realm 4、创建实体 5、增删改查 6、异步操作 7、数据迁移(版本升级) Demo地址(https://github.com/RaphetS/DemoRealm ) 增删查
  • Realm学习(二)

    千次阅读 2016-06-07 16:53:24
    首先,realm1.0.0发布了  我又来ZB realm了!我就是Afinal2群的冷武,无形ZB,最为致命!  这次打算按照使用顺序来扯扯:Rx大法好!  一、配置  建议最好是在Application中设置统一配置,这样方便在整个app中...
  • Realm学习<1>

    2015-12-11 14:01:15
    Realm,为移动设备而生,替代SQLite和Core Data。为你省下数周的时间和数千行的代码,帮你创造出更棒的用户体验。(这是摘自 官网的原话,官网文档有中文的版本,开发团队中貌似有一个中国人)Realm的特点官网罗列的很...
  • Realm 学习(一)——平台搭建

    千次阅读 2015-07-17 15:13:01
    iOS:从Carthage/Build/iOS/ 中,拖动RealmSwift.framework和Realm.framework到工程“General”的“Linked Frameworks and Libraries”中。 Mac :从Carthage/Build/Mac/ 中,拖动RealmSwift.framework和Realm....
  • 安卓数据库框架——Realm学习 参考: http://blog.5ibc.net/p/96511.html http://www.jianshu.com/p/37af717761cc https://realm.io/cn/docs/java/latest/#section-1   安卓数据库框架简介: 当我们的app有数据...
  • realm学习

    千次阅读 2016-09-19 16:18:04
    realm是一个跨平台移动数据库引擎,支持iOS、OS X(Objective-C和Swift)以及Android。 为了彻底解决性能问题,核心数据引擎C++打造的MVCC 数据库(MVCC 指的是多版本并发控制),并不是建立在SQLite之上的ORM。...
  • Realm数据库学习之快速入门

    万次阅读 2016-09-14 16:49:33
    build.gradle配置顶层build.gradlebuildscript { repositories { jcenter() } dependencies { classpath "io.realm:realm-gradle-plugin:1.2.0" } } app模块中的build.gradleapply plugin: '
  • 之前都是修改shiro的realm,根据不同情况去判断,会造成代码特别臃肿。 所以这次尝试用多个realm 来实现多种认证方式登录。 认证之前先了解了一下shiro多realm处理的三种策略: SecurityManager 接口继承了 ...
  • 安卓数据库框架——Realm进阶学习 参考: https://realm.io/cn/docs/java/latest/#realms http://ngudream.com/2016/08/13/realm-builder/   Real的配置 基础配置 一般我们不配置migration和modules。 ...
  • shiro学习&自定义realm

    2019-04-25 21:05:14
    今天来学习一下shrio自定义realm,首先,在这里定义一个我们的realm,没有做任何的操作,如下。 public class MyRealm extends AuthorizingRealm{ @Override public String getName() { return "MyRealm"; } ...
  • 相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为安卓开发者带来了方便。 在这篇快速入门教程中,你将学到Android版Realm的基础知识。本教程我们...
  • Realm: 域,Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行以确定用户身份是否合法,也需要从Realm得到用户相应的角色权限进行验证...
  • Realm学习笔记—1

    千次阅读 2016-02-26 09:45:03
    Realm是一个移动端的数据库,Realm是SQLite和CoreData的替代者。它可以节省你成千上万行代码和数周的工作,并且让你精巧的制作出令人惊叹的用户体验。 文档版本 0.93.2 在github上获取 需求: iOS7以上 OS X...
  • shiro-学习3-自定义Realm

    2018-12-08 13:43:30
    前面两篇都是使用的shiro自带的支持的Realm,假如不符合我们业务需求怎么办了?能否自定义了,作为一个优秀的开源框架,当然是可以自定义的了,自定义很简单,只需要继承:AuthorizingRealm  自定义Realm代码如下...
  • shiro学习&加密realm

    2019-04-26 11:12:05
    现在的这个自定义是realm,如下所示,需要重写三个方法。同时,在验证方法中,需要从数据库中,获取密码,告诉加盐形式。我们来看具体参数。 public class PasswordRealm extends AuthorizingRealm { @Override ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 602
精华内容 240
关键字:

realm学习