Tag: 领域

使用Realm和RxJava 2

我在我的Android应用程序中使用RxJava 2,并且正在集成Realm。 据我所知,Realm默认只支持RxJava 1,并且在查询RealmResults时允许返回Observable ,如下所示: Realm.getDefaultInstance() .where(VideoBundle.class) .findAll() .asObservable() .first() 返回的Observable来自RxJava 1.我如何一起使用Realm和RxJava 2? 我在这里和这里找到了 2个相关问题,但没有找到简洁的答案。 此外,文档(在此处: https : RxObservableFactory )提到创建自定义RxObservableFactory ,但没有提供有关如何执行此操作的资源。 Realm如何与已经使用RxJava 2的项目一起使用?

在SecretKey上调用.getEncoded()会返回null

我使用以下代码生成AES密钥: KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(“db_enc_key”, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT); KeyGenParameterSpec keySpec = builder .setKeySize(256) .setBlockModes(“CBC”) .setEncryptionPaddings(“PKCS7Padding”) .setRandomizedEncryptionRequired(true) .setUserAuthenticationRequired(true) .setUserAuthenticationValidityDurationSeconds(5 * 60) .build(); KeyGenerator keyGen = KeyGenerator.getInstance(“AES”, “AndroidKeyStore”); keyGen.init(keySpec); SecretKey sk = keyGen.generateKey(); 但每当我尝试通过sk.getEncoded()获取密钥的byte []版本时,该方法返回null。 文档说它应该返回编码的密钥,如果密钥不支持编码,则返回null,但我不认为密钥不支持编码。 我需要byte [],因为我想加密一个领域数据库(我需要将2个AES-256密钥组合为字节数组)[ https://realm.io/docs/java/latest/#encryption] 官方文档使用SecureRandom,但也指出这是一种愚蠢的方式,并且永远不会存储密钥。 因此,我想使用KeyStore安全地存储两个独立的AES-256密钥。 PS:代码只是一个测试代码而不是最终产品,因此对编码风格的任何评论都是无用的。 我目前正试图让一个正在运行的版本。 编辑:所以我尝试了以下代码,它成功生成了一个AES密钥(尽管只有16个字节的长度): SecretKey sk1 = KeyGenerator.getInstance(“AES”).generateKey(); 当我对它使用getEncoded()方法时,我甚至会得到字节数组,所以我自然而然地使用以下代码将其保存到KeyStore: KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(sk1); KeyStore.ProtectionParameter pp […]

Getter与任何领域无关 – Realm

我是新手使用Realm库 ,并试图在我的Android应用程序中实现它。 刚刚陷入我试图根据我的json响应中的特定元素的视图类型对listview进行分区的问题。 我试图使用recycler view实现这些部分,但问题是我有2种视图类型,并且这些视图类型的标题添加导致了问题。 由于Realm没有RecyclerAdapter的支持,我创建了一个实现,它将使用支持RecyclerView的自定义适配器。 所以,我虽然会使用ListView并尝试为每个Object类型使用一个简单的接口来确定类型,然后根据组的位置插入Headers。 出于某种原因,Realm不允许我在扩展RealmObject的类中实现接口。 这就是这个类的样子: import com.google.gson.annotations.SerializedName; import io.realm.RealmObject; import io.realm.annotations.Ignore; import io.realm.annotations.PrimaryKey; public class TestClass extends RealmObject implements Subjects { @PrimaryKey @SerializedName(“subjectID”) private String subjectID; private String subjectDate; @SerializedName(“subjectDescription”) private String subjectDescription; public String getSubjectID() { return subjectID; } public void setSubjectID(String subjectID) { this.subjectID = subjectID; } public String […]

在Realm上迁移0.81.1

添加对象后得到不同的exception。 需要迁移 计划中没有找到的课程 磁盘上的版本比请求的版本新 怎么了? 1 – MainActivity.java RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(context) .build(); Realm.setDefaultConfiguration(realmConfiguration); Realm realm = Realm.getDefaultInstance(); realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { RealmTestObjectOne testObjectOne = new RealmTestObjectOne(); testObjectOne.setValue(value); realm.copyToRealmOrUpdate(testObjectOne); } }); 2 – RealmTestObjectOne.java public class RealmTestObjectOne extends RealmObject { @PrimaryKey private int key = 1; private String value; […]

由于null对象引用,无法向RealmList添加新对象

我必须使用realm对象,一个是带有两个字符串和一个布尔值的基本RealmObject,另一个是该对象的RealmList,以便于访问。 当我尝试从我的ContactBook实例中获取列表并添加新对象时,我尝试在空对象引用上调用虚方法。 但是,我能够获得联系簿的大小,以及联系人的数量,因此这些不是空的。 类我尝试添加新对象的地方 public void viewSetup() { setContentView(R.layout.activity_contacts); ButterKnife.inject(this); Realm.deleteRealmFile(this); realm = Realm.getInstance(this); results = realm.where(ContactBook.class).findAll(); if (toolbar != null) { setSupportActionBar(toolbar); } if (results.size() == 0) { realm.beginTransaction(); ContactBook contactBook = realm.copyToRealm(new ContactBook()); realm.commitTransaction(); } } public void setupCursor() { Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); ContactBook contactBook = results.first(); realm.beginTransaction(); […]

Realm.io notifications – 如何只监听某些表中的更改?

我在realm java文档中看到了这个示例代码。 public class MyActivity extends Activity { private Realm realm; // A reference to RealmChangeListener needs to be held to avoid being // removed by the garbage collector. private RealmChangeListener realmListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); realm = Realm.getDefaultInstance(); reamlListener = new RealmChangeListener() { @Override public void onChange() { // … do […]

保存领域关系不会持久存在

我有一份文章清单。 使用realm.copyToRealmOrUpdate();插入这些文章realm.copyToRealmOrUpdate(); 哪作得很好。 现在每篇文章都有一个不应该持久化的authorId。 相反,我想找到存储的作者RealmObject并设置它与文章的关系。 Author author = realm.where(Author.class).equalTo(“id”, article.getSerializedAuthor()).findFirst(); article.setAuthor(author); 以某种方式,这似乎并没有被领域所持久。 这同样适用于图像RealmObject ,就像我在保存之前迭代一样。 这是完整的片段。 realm.beginTransaction(); realm.copyToRealmOrUpdate(articles.data); for(Article article : articles.data) { Author author = realm.where(Author.class).equalTo(“id”, article.getSerializedAuthor()).findFirst(); article.setAuthor(author); for (Image image : article.getSerializedImages().data) { if (article.getImages() == null) { article.setImages(new RealmList()); } article.getImages().add(image); } } realm.commitTransaction(); 如果您需要更多信息,请与我们联系。 谢谢。

Android Realm文件大小

我是android编程的新手。 我为我的简单成绩跟踪器实现了Realm,然而,文件大小从1.5mb增加到5mb。 这是正常的吗? 我只是在每个使用oncreate的类中添加一个领域实例,只要活动有可能结束,就在realm.close()中添加。 还围绕每个对象创建包装了begin和commit事务。 有没有我做错的东西,结果是巨大的文件大小? 谢谢! 编辑:我的意思是apk大小

RealmObjects中的自定义方法…解决方案?

我在我的android应用程序中使用Realm作为数据模块,尽管我遇到了一些关于如何为Realm对象分配自定义方法的问题。 在iOS coredata模块中,您有NSObjects,它们可以保存到内存中,并且在各自的类中也允许延展性。 我可以使用什么样的系统来解决这个问题? 我尝试为我的所有领域对象制作“父类”,但这不起作用。 例如:“TeacherRealm”只包含教师对象的getter和setter,而“TeacherParent”允许用户运行某些算法来查找教师的数据。 在TeacherParent类中,我尝试初始化TeacherRealm,在TeacherRealm中,我为TeacherParent对象提供了一个getter和setter。 低,请注意,我的TeacherRealm对象类不支持自定义TeacherParent对象。 有没有人遇到过这个问题/找到了解决方案呢? 我知道这听起来很混乱,但如果有必要,我可以提供更多信息

Android领域 – 从服务访问领域对象

我有一个在我的活动中创建的领域对象。 我需要能够在我创建的服务中访问此对象。 但是,我在服务中创建Realm对象时遇到错误 mRealm = Realm.getInstance(getApplicationContext()); java.lang.IllegalStateException:从错误的线程访问Realm。 Realm对象只能在创建它们的线程上访问 现在我理解这意味着因为领域对象是在我的活动上创建的,所以我无法从后台线程访问它。 但是,除了创建我自己的自定义处理程序线程之外,我找不到一个简单的方法,但这似乎是一种笨重的方式。 我在这里遗漏了什么,或者是否真的没有更好的方法可以从不同的线程中访问Realm对象? 更新: 我深入挖掘了一下,在IntentService中,onHandleIntent方法在一个单独的线程中运行,而不是在类中的其他方法。 因此,我无法创建类级别的Realm实例,并且能够与onHandleIntent方法的内部和外部进行交互。 这就是造成线程exception的原因。 除了在每个方法中创建一个单独的Realm实例,我需要访问该对象并一遍又一遍地检索它,我认为Ilya Tretyakov的答案是最好的。 我可以在构造函数中从域中复制对象,然后在服务的整个生命周期中使用它。 任何需要写回Realm对象的方法都需要在该方法中实例化自己的Realm实例。