我有以下课程:
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) 如何and使用Realm 创建操作?
示例我有一个日期和月份的对象,我想检查这两个字段值.
就像是 :
RealmResults<Event> toEdit = realm.where(Event.class)
.equalTo("day", day)
.and
.equalTo("month", month)
.findAll();
Run Code Online (Sandbox Code Playgroud)
但据我所知,没有and运营商.
谢谢
我有一些代码可以下载"当前"对象的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
我正在尝试使用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) 我正在使用swift开发iOS应用程序,并选择Realm作为它的数据库解决方案.我使用realm docs中的write/add函数在AppDelegate中编写了默认数据,它工作得很好.所以在第一次启动后,我有一个带有初始数据的*.realm文件.在Realm文档中,我找到了一个名为"使用应用程序捆绑领域"的部分,我将*.realm文件添加到项目中并在编写时构建阶段.
我无法理解接下来应该做什么(以及压缩*.realm文件的部分内容).我试图理解迁移示例中的代码,但我不太了解Obj-C.
请尽可能明确地将带有初始数据的*.realm文件添加到swift ios项目中,并在首次启动时将此数据加载到Realm数据库中.
我试图在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对象列表(让我们说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) 我有三个通过列表嵌套的对象,如下所示:
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)
但现在我只需要素食主义者的饭菜.因此,我希望获得所有线路的选定食堂,但只有纯素食品.这是否可以在领域中筛选检索到的对象中的列表?
我正在开发一个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)
谁能建议我怎么做?
我一直在尝试在我的Xamarin android proyect中使用Realm,其中一个依赖是Fody,每次我尝试运行我的应用程序时都会显示以下错误:错误MSB4044:"Fody.WeavingTask"任务没有给出一个值必需参数"SolutionDir".
我一直在寻找修复,但找不到它,你知道如何赋予它一个价值吗?它在哪里?
对于领域块包我已经创建了FodyWeavers.xml