有没有办法存储int []和String [],除了创建一个包含这些的新对象,然后将其存储在realmList中
我有一个对象,它接受String,int []和String []的参数.你不能在领域中存储int []和String [],所以我创建了一个对象
public class Workouts extends RealmObject {
private String workout;
public Workouts() {
}
public Workouts(String workout) {
this.workout = workout;
}
public String getWorkout() {
return workout;
}
public void setWorkout(String workout) {
this.workout = workout;
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class Multiplier extends RealmObject {
private int multiplier;
public Multiplier() {
}
public Multiplier(int multiplier) {
this.multiplier = multiplier;
}
public int getMultiplier() {
return multiplier;
}
public void setMultiplier(int multiplier) { …Run Code Online (Sandbox Code Playgroud) Realm框架,从0.91.5到0.92.0我的项目(用斯威夫特).我发现Realm Team已经将Swift部分和Objective-C部分与之前的整个Cocoa Framework 分开,团队也改变了语法.我已经将我的代码更正为最新的Realm语法,但我仍然遇到了一些问题init().fatal error: use of unimplemented initializer init(realm:schema:) for CardModel.Realm.MultiPeer Connectivity框架进行项目,这意味着我需要Encode和Decode交换数据.init()到CardModel,但没有奏效.import RealmSwift
class CardModel: Object {
dynamic var cardID: String = ""
dynamic var firstName: String = ""
dynamic var lastName: String = ""
dynamic var userImage = NSData()
dynamic var status: String = …Run Code Online (Sandbox Code Playgroud) 我正在使用领域将我的数据存储在Android上.真棒的框架!现在我唯一的问题是:
我在我的数据库中有一个带有国家ID的数组列表字符串.
现在我找回包含与国家关系的饮料.
有没有办法可以像这样进行查询:
String [] ids;
realm.where(Drinks.class).equalsTo("country.id", ids);
Run Code Online (Sandbox Code Playgroud)
那样的东西?
或者我是否真的需要进行查询以获取所有饮料,然后手动过滤列表?
编辑:
我的课程:
public class Drinks extends RealmObject {
@PrimaryKey
private String id;
private String name;
private Country country;
}
public class Country extends RealmObject {
@PrimaryKey
private String id;
private String name;
}
Run Code Online (Sandbox Code Playgroud) 文档说明了明显的:
add(_:update:) Adds or updates an object to be persisted it in this Realm.
create(_:value:update:) Creates or updates an instance of this object and adds it to the Realm populating the object with the given value.
Run Code Online (Sandbox Code Playgroud)
但我不能完全看出有什么不同吗?
我正在开发一个简单的iOS应用程序来学习Swift,我正在使用Realm.据我所知,在Realm中,反向关系是通过一个LinkingObjects属性来实现的,该属性是一个包含链接到那个对象的所有对象的集合.
从Realm文档中考虑这个例子:
class Person: Object {
// ... other property declarations
let dogs = List<Dog>()
}
class Dog: Object {
dynamic var name = ""
dynamic var age = 0
let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}
Run Code Online (Sandbox Code Playgroud)
在我的模型,我知道,每个Dog实例将只有一个所有者,因为每一个狗,创建时被添加到只有一个Person的List.
现在,我想有一个owner: Person属性的Dog类,它唯一的主人引用使代码更直观,更简单的(而不必写出dog.owners.first每一次),同时保持延迟加载行为(它们被延迟加载的,对不对? ).我不知道查询"链接对象"有多贵,但由于周围会有很多"狗",我认为最好不要在对象初始化时访问它们.
现在这些是我能想到的解决方案:
1:
class Dog: Object {
let owner: Person = LinkingObjects(fromType: Person.self, property: "dogs").first!
}
Run Code Online (Sandbox Code Playgroud)
2A:
class Dog: Object { …Run Code Online (Sandbox Code Playgroud) 是否可以保存一组对象Realm?每当我对数组进行更改时,都应将其保存到Realm.
我目前的解决方案是使用a保存对象的对象for loop.对于追加/修改对象,调用save()将完成工作,但不是从我删除对象时.
class CustomObject: Object {
dynamic var name = ""
dynamic var id = 0
override static func primaryKey() -> String? {
return "id"
}
}
struct RealmDatabase {
static var sharedInstance = RealmDatabase()
var realm: Realm!
let object0 = CustomObject()
let object1 = CustomObject()
var array = [object0, object1]
init() {
self.realm = try! Realm()
}
func save() {
for object in self.array {
try! self.realm.write {
self.realm.add(object, update: true)
} …Run Code Online (Sandbox Code Playgroud) 我需要在Realm中进行一个简单的查询,检索一个MyModel对象列表,然后在我的应用程序的其他地方使用它.碰巧一旦我查询Realm,每个对象都有空值,但toString返回预期值.
模型:
@RealmClass
public class MyModel extends RealmObject implements Serializable {
public static final String KEY_MODEL = "key_myModel";
@PrimaryKey
private int id;
private String myStr;
private int myInt;
//.... getters and setters
@Override
public String toString() {
return "id = " + id
+ "\nmyStr = " + myStr
+ "\nmyInt = " + myInt;
}
}
Run Code Online (Sandbox Code Playgroud)
如何存储值:
public static void storeModel(MyModel model) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.copyToRealm(model);
realm.commitTransaction();
}
Run Code Online (Sandbox Code Playgroud)
如何检索对象:
public static RealmList<MyModel> getNewElementsFromIndex(int indexFrom) …Run Code Online (Sandbox Code Playgroud) 如果Realm Model中的字段实际上需要getter和setter,我无法在任何地方找到它.例如,https://realm.io/docs/java/latest/api/io/realm/RealmObject.html上的文档说
RealmObject唯一的限制是不允许字段为final,transient或volatile.允许使用任何方法和公共字段.提供自定义构造函数时,必须声明不带参数的公共构造函数并为空.
使用Ignore注释的字段没有这些限制,也不需要getter或setter.
这似乎暗示了getter和setter对于非忽略字段的要求.然而,https : //realm.io/docs/java/latest/#customizing-objects上的文档说
可以像使用POJO一样使用RealmObjects.从RealmObject扩展,您可以让字段公开,并使用简单的赋值而不是setter和getter.
然后显示一个没有任何getter和setter的Realm Model的代码,而是有我们应该使用的公共字段.真?我认为Realm甚至没有在实际字段中存储任何值,所以从它们读取和写入可能是一个坏主意?我的意思是他们的调试文档https://realm.io/docs/java/latest/#debugging state:
不幸的是,这些值是错误的,因为不使用字段值.Realm在幕后创建一个代理对象,并覆盖getter和setter,以便访问Realm中的持久数据
那么有人可以赐教吗?我可以跳过getter和setter,只是坚持公共领域吗?有没有关于此的全面文档?
将Realm升级1.1.0为2.0.2.我在处理对象时遇到此错误.在早期版本中,它工作正常.
io.realm.exceptions.RealmException:'RealmNoticeModelClass'有一个主键,改为使用'createObject(Class,Object)'.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rana.sahaj.myyu, PID: 20202
io.realm.exceptions.RealmException: 'RealmNoticeModelClass' has a primary key, use 'createObject(Class<E>, Object)' instead.
at io.realm.Realm.createObjectInternal(Realm.java:821)
at io.realm.Realm.createObject(Realm.java:802)
at com.rana.sahaj.myyu.notice.NoticeOnItemSelectedActivity$1$2.onSuccess(NoticeOnItemSelectedActivity.java:162)
at com.rana.sahaj.myyu.notice.NoticeOnItemSelectedActivity$1$2.onSuccess(NoticeOnItemSelectedActivity.java:156)
at com.google.android.gms.tasks.zze$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5052)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
代码是
realm.beginTransaction();
RealmNoticeModelClass realmNoticeModelClass = realm.createObject(RealmNoticeModelClass.class);
realmNoticeModelClass.setDocUrl(DocUrl1);
realmNoticeModelClass.setHashname(heading);
realmNoticeModelClass.setContent(contentString);
realmNoticeModelClass.setTime(getIntent().getExtras().getString("notice_time"));
realmNoticeModelClass.setPicurl(picUrlName);
realmNoticeModelClass.setUserPic(getIntent().getExtras().getString("image_user_notice"));
realmNoticeModelClass.setPdfUrl(PdfUrl);
realmNoticeModelClass.setPicOffline(SnapshotKey);
realmNoticeModelClass.setMetaType(null);
realmNoticeModelClass.setTimeStamp(SnapshotKey);
realm.commitTransaction();
Run Code Online (Sandbox Code Playgroud)
n RealmNoticeModelClass
public class RealmNoticeModelClass extends RealmObject { …Run Code Online (Sandbox Code Playgroud) 在步骤4中,数据应该是最新数据,但我们没有看到任何数据.
// remark: all main thread shared a realm object
DBManager.deleteAll()
// call api success, get newdata
DispatchQueue.global(qos: .background).async {
DBManager.initDBData(<newdata>)
DispatchQueue.main.async {
print("has data?????", DBManager.getBrands().count)
}
}
// when write
func write() {
let realmBackgroud = try! Realm()
try! realmBackgroud.write {}
}
Run Code Online (Sandbox Code Playgroud)