标签: realm

Android Realm copyToRealmOrUpdate创建嵌套对象的副本

我有以下课程:

public class Note extends RealmObject {

    @PrimaryKey
    private String id;

    private Template template;

    // other primitive fields, getters & setters
}

public class Template extends RealmObject {

    private String name;

    private String color;

    // other primitive fields, getters & setters
}
Run Code Online (Sandbox Code Playgroud)

我通过Retrofit和Gson从后端获取数据,所以我有随时可用的java对象作为响应.

让我们想象一下,每当我调用它时,后端会返回三个注释.当我得到Note对象列表时,我会执行以下操作:

private void fetchNotesAndSave() {
    List<Notes> notes = getNotesViaRetrofit();        

    Realm realm = Realm.getInstance(mContext);
    realm.beginTransaction();
    realm.copyToRealmOrUpdate(notes);
    realm.commitTransaction();
    realm.close();
}
Run Code Online (Sandbox Code Playgroud)

之后我调用这些行来检查存储对象的数量:

int notesCount = mRealm.where(Note.class).findAll().size();
int templatesCount = mRealm.where(Template.class).findAll().size();
Run Code Online (Sandbox Code Playgroud)

首次:

notesCount == 3;
templatesCount == 3;
Run Code Online (Sandbox Code Playgroud)

那就对了.但是,如果我再次调用服务器,获取相同的注释(相同的primaryKey ids),并再次调用fetchNotesAndSave(),我将得到以下结果:

notesCount …
Run Code Online (Sandbox Code Playgroud)

java android realm

16
推荐指数
1
解决办法
6945
查看次数

使用Realm数据库检查两个字段

如何and使用Realm 创建操作?

示例我有一个日期和月份的对象,我想检查这两个字段值.

就像是 :

 RealmResults<Event> toEdit = realm.where(Event.class)
        .equalTo("day", day)
        .and
        .equalTo("month", month)
        .findAll();
Run Code Online (Sandbox Code Playgroud)

但据我所知,没有and运营商.

谢谢

android realm

16
推荐指数
1
解决办法
5142
查看次数

在IntentService和AsyncTask(Android)之间使用共享代码时,Realm`从错误的线程访问`错误

我有一些代码可以下载"当前"对象的JSON.但是,每当警报响起时(当应用程序没有运行任何UI时),以及应用程序运行时的AsyncTask,IntentService都需要调用相同的代码.

但是,我得到一个错误说Realm access from incorrect thread. Realm objects can only be accessed on the thread they were created.但是,我不明白这个堆栈跟踪是如何或为什么在另一个线程上.

我能够通过复制所有共享代码并将其直接粘贴到DownloadDealService的onHandleIntent方法中来消除错误,但它非常草率,我正在寻找一个不需要复制代码的更好的解决方案.

如何在不重复代码的情况下摆脱此错误?谢谢.

public class DownloadDealService extends IntentService
{
    ...
    @Override
    protected void onHandleIntent(Intent intent)
    {
        Current todaysCurrent = Utils.downloadTodaysCurrent(); //<--- included for background info
        String dateString = Utils.getMehHeadquartersDate(); //(omitted)
        Utils.onDownloadCurrentCompleteWithAlarm(todaysCurrent, dateString); //<------ calling this...
    }
}

public class Utils
{
    // ...other methods ommitted...

    //This method is not in the stack trace, but I included it for background …
Run Code Online (Sandbox Code Playgroud)

multithreading android realm android-asynctask android-intentservice

16
推荐指数
1
解决办法
2万
查看次数

让GSON&Realm发挥出色

我正在尝试使用Realm + GSON.如果他们能够很好地合作,那将是一场天国的比赛.

但是,当我使用"extends RealmObject"扩展我的模型对象时,我得到了这个:

10-08 17:00:19.578  12492-12492/appwise.be.gsontestproject E/AndroidRuntime? FATAL EXCEPTION: main
    Process: appwise.be.gsontestproject, PID: 12492
    java.lang.StackOverflowError
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:372)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:376)
            at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:381)
            at …
Run Code Online (Sandbox Code Playgroud)

android realm gson

15
推荐指数
1
解决办法
4721
查看次数

领域 - 添加包含初始数据的文件到项目(iOS/Swift)

我正在使用swift开发iOS应用程序,并选择Realm作为它的数据库解决方案.我使用realm docs中的write/add函数在AppDelegate中编写了默认数据,它工作得很好.所以在第一次启动后,我有一个带有初始数据的*.realm文件.在Realm文档中,我找到了一个名为"使用应用程序捆绑领域"的部分,我将*.realm文件添加到项目中并在编写时构建阶段.

我无法理解接下来应该做什么(以及压缩*.realm文件的部分内容).我试图理解迁移示例中的代码,但我不太了解Obj-C.

请尽可能明确地将带有初始数据的*.realm文件添加到swift ios项目中,并在首次启动时将此数据加载到Realm数据库中.

xcode realm ios swift

15
推荐指数
1
解决办法
6917
查看次数

如何使用Realm Swift Init

我试图在Swift中使用init for Realm.我尝试了以下内容

override init(value: AnyObject) { 
    super.init() 
    println("this is not called") 
} 

required init() { 
    super.init() 
    println("this is called") 
}
Run Code Online (Sandbox Code Playgroud)

我希望能够将一个对象传递给初始化器,但是,我无法获得第一个被调用的函数.

realm swift

15
推荐指数
2
解决办法
1万
查看次数

如何在Realm Swift中使用NOT IN

我有一个Realm对象列表(让我们说User),我想要检索所有这些对象,但"John","Marc","Al'Med"等等.

我尝试了以下方法:

var namesStr = ""
for user in unwantedUsers {
    namesStr += "'" + user.name + "', "
}
namesStr = String(namesStr.characters.dropLast().dropLast())
let predicate = NSPredicate(format: "NOT name IN {%@}", namesStr)
let remainingUsers = uiRealm.objects(User).filter(predicate)
Run Code Online (Sandbox Code Playgroud)

我也试过NSPredicate(format: "name NOT IN {%@}", namesStr)但它会崩溃(引发异常).

第二件事,我怎么想逃避在NSPredicate的名字.如果其中一个名称具有'字符,则它可能不起作用.


编辑

感谢LE SANG,这是功能结果:

var userArr: [String] = []
for user in unwantedUser {
    userArr.append(user.name)
}
let predicate = NSPredicate(format: "NOT name IN %@", userArr)
let remainingUsers = uiRealm.objects(User).filter(predicate)
Run Code Online (Sandbox Code Playgroud)

realm nspredicate ios swift

15
推荐指数
1
解决办法
5715
查看次数

iOS Realm过滤关系列表中的对象

我有三个通过列表嵌套的对象,如下所示:

class Canteen: Object {

        dynamic var name: String?
        let lines = List<Line>()
}

class Line: Object {

        dynamic var name: String?
        let meals = List<Meal>()
}

class Meal: Object {

        dynamic var name: String?
        dynamic var vegan: Bool = false
}
Run Code Online (Sandbox Code Playgroud)

获得所有线路和餐点的所有食堂都没有问题.我现在正在做的是:

let predicate = NSPredicate(format: "name == %@", selectedCanteenType.rawValue)
canteens =  realm.objects(Canteen).filter(predicate)
Run Code Online (Sandbox Code Playgroud)

但现在我只需要素食主义者的饭菜.因此,我希望获得所有线路的选定食堂,但只有纯素食品.这是否可以在领域中筛选检索到的对象中的列表?

realm ios swift

15
推荐指数
1
解决办法
2万
查看次数

Enum支持Realm?

我正在开发一个Android应用程序和Realm,我需要为我的一个对象创建一个枚举属性; 但我在这篇文章中发现Realm还不支持enum.

我的目标是这样的:

public class ShuttleOption extends RealmObject {
    private int Id;
    private String Label;
    private ShuttleTypes OriginShuttleType;
}
Run Code Online (Sandbox Code Playgroud)

和我的枚举类(ShuttleTypes)对应:

HOME = 1;  
Run Code Online (Sandbox Code Playgroud)

WORK = 2;
Run Code Online (Sandbox Code Playgroud)

谁能建议我怎么做?

java enums android realm

15
推荐指数
2
解决办法
1万
查看次数

Xamarin与Fody.WeavingTask和SolutionDir有关

我一直在尝试在我的Xamarin android proyect中使用Realm,其中一个依赖是Fody,每次我尝试运行我的应用程序时都会显示以下错误:错误MSB4044:"Fody.WeavingTask"任务没有给出一个值必需参数"SolutionDir".

我一直在寻找修复,但找不到它,你知道如何赋予它一个价值吗?它在哪里?

对于领域块包我已经创建了FodyWeavers.xml

realm xamarin fody

15
推荐指数
3
解决办法
3807
查看次数