有没有办法存储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作为我的应用程序,我希望能够在后台线程上查询结果并在主线程上接收它们.实现这一目标的最佳方法是什么?什么是使用领域的最佳实践(主线程和背景有不同的方法?主要在应用程序中使用领域的静态实例?可能是另一种好方法?)
我已阅读并看到这些选项可用: - 将领域对象解析为我自己的对象并返回它们(结果的副本). - 返回对象的键并从主线程再次查询.
感谢任何人都可以给我的帮助,我真的认为领域有很大的潜力,但缺乏良好的教程和最佳实践.
文档说明了明显的:
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)
但我不能完全看出有什么不同吗?
将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) 我试图了解 mongoDB 的每个元素是如何工作的,但我真的很困惑如何处理离线。
\n前往: https: //realm.io/
\n我读到了这个:
\n\n\nRealm\xe2\x80\x99s 移动数据库是 CoreData 和 SQLite 的开源、开发人员友好的替代方案。只需几分钟即可启动,几小时内即可移植您的应用程序,并节省数周的工作时间。
\n
然后这部分提到了离线部分:
\n\n\n专为离线使用而设计
\n
这是否意味着Realm可以在移动应用程序中用作完全离线的数据库?
\n如果我理解正确的话,这个数据库的工作方式与 Android Room 类似,我使用对象/文档存储数据。
\n因为当我转到“让我们开始”部分时,我被重定向到此处:
\nhttps://docs.mongodb.com/realm/get-started/introduction-mobile/
\n我在哪里读到这部分:
\n\n\n在开始之前,您需要一个 MongoDB Atlas 帐户。您可以在 Atlas 入门文档中了解有关创建 Atlas 帐户的更多信息
\n
所以我的第一个问题:为什么我需要 Atlas 帐户?我理解Atlas就是在云端有一个MongoDB数据库。如果我想使用离线数据库,为什么需要这个?
\n我想本教程想要展示所有工具的协同工作。所以也许可以跳过该步骤。但后来转到 React Native 教程,我看到了这部分:
\nhttps://docs.mongodb.com/realm/tutorial/react-native/#std-label-react-native-tutorial
\n\n\n连接到您的 MongoDB Realm 应用程序
\n
\n要让应用程序与您的后端一起工作,您首先需要实例化 Realm 应用程序。Realm 应用程序是 MongoDB Realm 后端的接口。导航到 getRealmApp.js 文件并完成 getRealmApp() …
对最近在应用和扩展程序之间共享Realm数据感到非常兴奋.该文档详细说明了如何将默认域设置为应用程序组目录,我已经开始工作了.
这就是我所坚持的 - 将旧数据库转移到应用程序组中的新位置的最佳方法是什么?
我正在使用Realm List/Results作为我的dataSource UITableView.在某些时候,我为它分配一个列表.喜欢:
var dataSource:List<SomeObject>! // Or >> Results<SomeObject>!
let aRealmObject = realm.objectForPrimaryKey(SomeObject.self, key: objectId)
dataSource = aRealmObject.someList // dataSource should be List
Run Code Online (Sandbox Code Playgroud)
然后我在这个列表上有一个过滤器如果用户更改了过滤日期,我喜欢这样:
dataSource = dataSource.filter("FILTER THE DATES",newDates) // dataSource should be Results
Run Code Online (Sandbox Code Playgroud)
但上面的行会导致错误,因为返回类型filter是一个Results对象并且aRealmObject.someList是一个List.
处理这种情况的最佳方法是什么?
List并将Results对象转换为List?怎么样??Results并转换List为Results?怎么样??谢谢,
我有两节课.首先看起来像这样:
class Person: Object {
dynamic var owner: String?
var dogs: List<Dogs>()
}
Run Code Online (Sandbox Code Playgroud)
和第二类看起来像这样:
class Dogs: Object {
dynamic var name: String?
dynamic var age: String?
}
Run Code Online (Sandbox Code Playgroud)
现在在ViewController'viewDidLoad'中我Person用空创建对象List并将其保存在Realm中
func viewDidLoad(){
let person = Person()
person.name = "Tomas"
try! realm.write {
realm.add(Person.self)
}
}
Run Code Online (Sandbox Code Playgroud)
它的伟大工程,我能创造Person,当我尝试读取这个数据的问题开始SecondViewController在ViewDidLoad做这件事:
var persons: Results<Person>?
func viewDidLoad(){
persons = try! realm.allObjects()
}
Run Code Online (Sandbox Code Playgroud)
并尝试新添加Dog到List按钮的动作做:
@IBAction func addDog(){
let newDog = Dogs()
newDog.name = …Run Code Online (Sandbox Code Playgroud) 在Realm中有两种执行写入事务的方法,它们之间的区别是什么?
1.
try! realm.write {
...
}
Run Code Online (Sandbox Code Playgroud)
2.
realm.beginWrite()
...
try! realm.commitWrite()
Run Code Online (Sandbox Code Playgroud) realm ×10
ios ×6
swift ×5
android ×2
java ×2
arrays ×1
mongodb ×1
react-native ×1
realm-cocoa ×1
realm-list ×1