gpt4 book ai didi

java - 在库中使用 realm.io 时出现 NoSuchMethodError

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:55 24 4
gpt4 key购买 nike

我按照 realm.io Java 文档部分 Sharing schemas 中描述的建议将包含 realm.io 函数的我的 Android 应用程序的模型类转移到一个库中.当我的应用程序(间接)调用库中的 realm.io 方法时,我遇到了 NoSuchMethodError。

java.lang.NoSuchMethodError: No static method copyOrUpdate(Lio/realm/Realm;Lmy/package/structure/MyModelClass;ZLjava/util/Map;)Lmy/package/structure/MyModelClass; in class Lio/realm/MyModelClassRealmProxy; or its super classes (declaration of 'io.realm.MyModelClassRealmProxy' appears in /data/user/0/my.name.space/files/.jrebel/load-dexes/bundle3/classes.zip) 
at io.realm.MyModuleMediator.copyOrUpdate(MyModuleMediator.java:98)
at io.realm.Realm.copyOrUpdate(Realm.java:1164)
at io.realm.Realm.copyToRealmOrUpdate(Realm.java:757)

这是我的图书馆的样子:

build.gradle(项目)

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'io.realm:realm-gradle-plugin:1.0.1'
}
}

build.gradle(库模块)

apply plugin: 'com.android.library'
apply plugin: 'realm-android'
...
buildTypes {
release {
minifyEnabled false
signingConfig signingConfigs.release
proguardFile getDefaultProguardFile('proguard-rules.pro')
}
}
...

proguard-rules.pro

我用了this snippet作为模板

-keep class io.realm.annotations.RealmModule
-keep @io.realm.annotations.RealmModule class *
-keep class io.realm.internal.Keep
-keep @io.realm.internal.Keep class * { *; }
-keep my.package.MyModelClass
-dontwarn javax.**
-dontwarn io.realm.**

MyModule.java

package my.package;

import io.realm.annotations.RealmModule;

@RealmModule(library = true, allClasses = true)
public class MyModule { }

MyRealm.java

package my.package;

import ...

public class MyRealm {
private final RealmConfiguration realmConfig;

public MyRealm(Context context) {
realmConfig = new RealmConfiguration.Builder(context)
.name("name.of.my.config")
.modules(new MyModule())
.build();
}

public Realm getRealm() {
return Realm.getInstance(realmConfig);
}
}

MyModelClass.class

package my.package;

import ...

public class MyModelClass extends RealmObject {

public void save(Context context) {
Realm realm = new MyRealm(context).getRealm();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm bgRealm) {
bgRealm.copyToRealmOrUpdate(MyModelClass.this);
}
});
realm.close();
}
}

在我的实际应用程序中,我调用了导致异常的类似内容:

MyActivity.java

// ...
MyModelClass c = new MyModelClass();
c.save(context);

当一切都在应用程序项目中时,上面的代码运行良好。

我是否遗漏了一些一般性的东西?关于 lib 的 proguard 设置,还有什么我需要考虑的吗?JRebel 会导致这种问题吗?

最佳答案

我认为您可能没有正确使用它,我建议您看一个完整的工作示例,例如他们引用的示例是 Sharing Schemas 的结尾关联。链接指向此存储库 full working example of realm lib and app .我建议你看看 Zoo class从库中,方法是唯一暴露给应用程序的东西,如您所见in the app's activity here (第 148 行及以下)。

我认为这只是您的困惑,因为根据我的理解,您正在调用您的库类并使用它,就像它是该 Activity 上下文的 Realm 实例一样,但事实并非如此。希望这可以引导您走上正确的道路!

基本上,您只需根据您的配置创建一个实例,这样您就不需要在那里传递上下文。

关于java - 在库中使用 realm.io 时出现 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38950695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com