- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试从 Firebase 下载对象并将它们存储在 Realm 中。结合这两个优秀的库时,我遇到了崩溃。
我创建了一个非常简单的演示应用程序来说明我的问题。在创建扩展 RealmObject 的对象时,Firebase 似乎感到不安。
我可以通过删除 RealmObject 扩展来完成这项工作,但我必须维护两个相同的对象。随着时间的推移,这变得复杂和令人沮丧,这远非理想。
Firebase:
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("players");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, "onDataChange: " + dataSnapshot.getChildrenCount());
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
//***CRASH here*****
Player player = snapshot.getValue(Player.class);
Log.d(TAG, "onDataChange: " + player.getFirstname());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, "onCancelled: ", databaseError.toException());
}
});
玩家:
public class Player extends RealmObject{
private int age;
private String firstname;
public Player() {
}
//getters and setters
}
Gradle :
compile 'com.google.firebase:firebase-database:11.8.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
Realm :
classpath 'io.realm:realm-gradle-plugin:4.3.1'
错误:
FATAL EXCEPTION: main
Process: com.test.testrealm, PID: 7616
java.lang.NoClassDefFoundError: Failed resolution of: Lio/reactivex/Observable;
at java.lang.reflect.Executable.getMethodReturnTypeInternal(Native Method)
at java.lang.reflect.Method.getReturnType(Method.java:141)
at java.lang.Class.getDeclaredMethods(Class.java:1880)
at com.google.android.gms.internal.zzelx.<init>(Unknown Source:310)
at com.google.android.gms.internal.zzelw.zzf(Unknown Source:12)
at com.google.android.gms.internal.zzelw.zzb(Unknown Source:182)
at com.google.android.gms.internal.zzelw.zza(Unknown Source:0)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source:10)
at com.test.testrealm.MainActivity$2.onDataChange(MainActivity.java:41)
at com.google.android.gms.internal.zzegf.zza(Unknown Source:13)
at com.google.android.gms.internal.zzeia.zzbyc(Unknown Source:2)
at com.google.android.gms.internal.zzeig.run(Unknown Source:71)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.ClassNotFoundException: Didn't find class "io.reactivex.Observable" on path: DexPathList[[zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/base.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_dependencies_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_resources_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_0_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_1_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_2_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_3_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_4_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_5_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_6_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_7_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_8_apk.apk", zip file "/data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.test.testrealm-Mj0Zh1FV_CGS7fFGuEYfWQ==/lib/arm64, /data/app/com.test.testrealm-Mj0Zh1FV_CGS7fFGuEYfWQ==/base.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_dependencies_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_resources_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_0_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_1_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_2_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_3_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_4_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_5_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_6_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_7_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_8_apk.apk!/lib/arm64-v8a, /data/app/com.test.testrealm-Mj0Zh1FN_CGS6fFGuEYfWQ==/split_lib_slice_9_apk.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
01-10 10:24:06.881 7616-7616/com.test.testrealm E/AndroidRuntime: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 19 more
Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.test.testrealm-Mj0Zh1FV_CGS7fFGuEYfWQ==/split_lib_resources_apk.apk
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:353)
at dalvik.system.DexFile.<init>(DexFile.java:100)
at dalvik.system.DexFile.<init>(DexFile.java:74)
at dalvik.system.DexPathList.loadDexFile(DexPathList.java:374)
at dalvik.system.DexPathList.makeDexElements(DexPathList.java:337)
at dalvik.system.DexPathList.<init>(DexPathList.java:157)
at dalvik.system.BaseDexClassLoader.<init>(BaseDexClassLoader.java:65)
at dalvik.system.PathClassLoader.<init>(PathClassLoader.java:64)
at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:73)
at com.android.internal.os.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:88)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:69)
at android.app.ApplicationLoaders.getClassLoader(ApplicationLoaders.java:35)
at android.app.LoadedApk.createOrUpdateClassLoaderLocked(LoadedApk.java:693)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:727)
at android.app.LoadedApk.getResources(LoadedApk.java:954)
at android.app.ContextImpl.createAppContext(ContextImpl.java:2270)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5639)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
at android.os.Handler.dispatchMessage(Handler.java:106)
最佳答案
这类类加载器问题可以通过两种方式解决:
1.) 为任何缺失添加一个虚拟类,参见 this answer详情
2.) 添加compile "io.reactivex.rxjava2:rxjava:2.1.8"
到依赖项
关于android - 结合使用 Firebase 和 Realm 时发生崩溃 - : Lio/reactivex/Observable; 的解析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48185420/
我想从树中创建一个可观察对象。每个节点都会生成一个依赖于其父节点的可观察对象(例如通过 switchMap)。在树的每一层,每个 child 的可观察值都需要合并。 我想转换这段代码,以便它使用可观察
RxJS Observables 是可以随时间同步或异步返回零到无限值的函数。 但是异步行为究竟是如何实现的呢?它是以某种方式使用单独的线程,还是使用 Web API 和 JS 事件循环? 最佳答案
我正在学习 Rx(尤其是 RxSwift),我对架构、层和边界有疑问。 我习惯于分层架构(数据、域、表示),通常是在 MVP 或 VIPER 上。对于这个项目,我使用的是 MVVM,这是 Reacti
我正在使用 Rx.Net 并且我有 Observable 发出时间序列点( double ,时间戳)。每次新点到达时,我想计算过去 30 秒的平均值。我想我需要某种不是基于计数而是基于时间戳的重叠窗口
public class ReactiveExample { public static void main(String[] args) throws InterruptedExceptio
我正在尝试制作带有背压的流动性。我的想法是,在当前项目之一完成处理之前,不会发出新的可流动项目。我正在使用 ResourceSubscriber 和 subscribeWith() 方法来实现这一点。
我很好奇谁开始了 ReactiveX/RxJS? Rx 似乎在很多语言/平台中实现,我很好奇它的起源是什么?首先是哪个项目? RxJS 在 Angular Web 框架中大量使用。它背后是否有像微软、
我试图使用 RxJava 来理解 ReactiveX,但我无法理解整个 Reactive 的想法。我的案例如下: 我有 Task 类。它有 perform() 方法,该方法执行 HTTP 请求并通过
我如何利用 ReactiveX按顺序执行异步调用?即,在第一个调用完成后执行第二个调用。 更具体地说,我正在使用 RxSwift在 iOS 中,我想链接在一起的异步是 UIView 动画(而不是在第一
我在我的 iOS 应用程序中使用 RxSwift 进行缓存,并且有一段这样的代码: let observable = Observable.of(cache.getItem(itemID), netw
我正在使用 ReactiveX在 iOS/Swift 中(RxSwift)。 假设我有一个可观察对象: let dataUpdates = ... 我订阅的: dataUpdates.subscrib
我正在学习 ReactiveX。我删除了错误检查、日志记录和其他部分,以便于阅读。 我有一个以 JSON 格式返回对象集合的服务: getPanels() { return this.http
寻找一种干净的方式来转换源 Observable发出单个 null (或哨兵值)在一段时间内不发射项目后。 例如,如果源 observable 发出 1, 2, 3然后停止发射 10 秒,然后发射 4
我想知道在 Rx 中解决以下问题的规范方法是什么:假设我有两个可观察对象,mouse_down和 mouse_up ,其元素表示鼠标按钮按下。在一个非常简单的场景中,如果我想检测长按,我可以通过以下方
我在创建以下可观察值时遇到问题。 我希望它接收预定义的值数组 我想按不同的事物进行过滤,并能够将它们作为单独的可观察值进行处理。 然后,当需要合并这些过滤后的可观察值时,我想保留原始观察值的顺序 //
我有一个 Observable .我想把它变成一个 Map它告诉我每个不同字符串的出现次数。 Observable 包含约 10 亿个元素,其中 1000 个是不同的(因此不能将整个数据集存储在 RA
swipeRefreshLayout.setOnRefreshListener(() -> { swipeRefreshLayout.setRefreshing(true); retrieveDa
我是 ReactiveX 的新手。我是通过阅读源代码来学习它的。一切都那么清晰,但突然间我得到了一个名为“Consumer”的词,它是一个接口(interface)。它被用来代替观察者。 谁能告诉我它
如何在不使用任何加载器的旧 javascript 应用程序中加载 RxJS? 对于 RxJS 4.x,我可以简单地这样做: RxJS 5 怎么样?他们的文档假设您正在使用某种类型的加载器来处理所有事
我正在寻找一个与 debounce(ms) 类似的运算符,但它触发第一个事件,然后等待 ms 然后触发第一个事件,依此类推上。 基本上,我想过滤发生时间非常接近的事件(就时间而言),但不是等到最后一个
我是一名优秀的程序员,十分优秀!