Room Persistance Library在插入和删除时致命错误11(SIGEGV)崩溃

我一直在试图在我的项目中使用房间数据库,但它一直在崩溃,我不能确定是什么原因是…

这是我的情况:

当用户在对话框中输入一个日志点并按下ok时,这个函数被调用

fun manualOkClicked() { /*Check if all fields are valid ( if they are, location is created and folderId is saved )*/ if (logpoint.canCreateLocation(context) && logpoint.canSelectFolder(view?.getSelectedFolder())) { DataSource.saveLogpoint(logpoint) } } 

这里是我如何保存日志点:

 fun saveLogpoint(logpoint: UserLogpoint) { Thread({ mydb.logpointDao().insert(logpoint) }).start() } 

而我的应用程序崩溃与此日志:

 12-27 16:17:31.108 17932-17941/com.example.myproject.debug A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x61724474 in tid 17941 (FinalizerDaemon) [ 12-27 16:17:31.109 2247: 2247 W/ ] debuggerd: handling request: pid=17932 uid=10145 gid=10145 tid=17941 12-27 16:17:31.120 2379-2379/? E/audit: type=1400 audit(1514387851.111:150): avc: denied { search } for pid=19174 comm="debuggerd" name="com.google.android.gms" dev="dm-1" ino=65716 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0 SEPF_SECMOBILE_7.0_0005 audit_filtered 12-27 16:17:31.131 2379-2379/? E/audit: type=1400 audit(1514387851.121:151): avc: denied { search } for pid=19174 comm="debuggerd" name="com.google.android.gms" dev="dm-1" ino=65716 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0 SEPF_SECMOBILE_7.0_0005 audit_filtered 12-27 16:17:31.131 2379-2379/? E/audit: type=1400 audit(1514387851.121:152): avc: denied { search } for pid=19174 comm="debuggerd" name="com.google.android.gms" dev="dm-1" ino=65716 scontext=u:r:debuggerd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0 SEPF_SECMOBILE_7.0_0005 audit_filtered 12-27 16:17:31.209 19174-19174/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 12-27 16:17:31.210 19174-19174/? A/DEBUG: Build fingerprint: 'samsung/xcover4ltexx/xcover4lte:7.0/NRD90M/G390FXXU1AQC1:user/release-keys' 12-27 16:17:31.210 19174-19174/? A/DEBUG: Revision: '4' 12-27 16:17:31.210 19174-19174/? A/DEBUG: ABI: 'arm' 12-27 16:17:31.210 19174-19174/? A/DEBUG: pid: 17932, tid: 17941, name: FinalizerDaemon >>> com.example.myproject.debug <<< 12-27 16:17:31.210 19174-19174/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x61724474 12-27 16:17:31.210 19174-19174/? A/DEBUG: r0 cb61ad58 r1 00000000 r2 3f800000 r3 00000012 12-27 16:17:31.210 19174-19174/? A/DEBUG: r4 cb61ad58 r5 1335b498 r6 6fd77fc8 r7 6f96bff4 12-27 16:17:31.210 19174-19174/? A/DEBUG: r8 1335b4c0 r9 de870900 sl cb61ad58 fp ffffffff 12-27 16:17:31.210 19174-19174/? A/DEBUG: ip 61724474 sp e7424420 lr e9cc3c1b pc 61724474 cpsr 200f0010 12-27 16:17:31.879 19174-19174/? A/DEBUG: backtrace: 12-27 16:17:31.879 19174-19174/? A/DEBUG: #00 pc 61724474  12-27 16:17:31.880 19174-19174/? A/DEBUG: #01 pc 00041c19 /system/lib/libbinder.so (_ZN7android6Parcel14freeDataNoInitEv+32) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #02 pc 00041bf1 /system/lib/libbinder.so (_ZN7android6ParcelD1Ev+4) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #03 pc 00097249 /system/lib/libandroid_runtime.so 12-27 16:17:31.880 19174-19174/? A/DEBUG: #04 pc 025b981d /system/framework/arm/boot-framework.oat (offset 0x1ea5000) (android.os.Parcel.nativeDestroy+80) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #05 pc 025b9077 /system/framework/arm/boot-framework.oat (offset 0x1ea5000) (android.os.Parcel.destroy+74) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #06 pc 025bc297 /system/framework/arm/boot-framework.oat (offset 0x1ea5000) (android.os.Parcel.finalize+42) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #07 pc 005e12b3 /system/framework/arm/boot-core-libart.oat (offset 0x47e000) (java.lang.Daemons$FinalizerDaemon.doFinalize+110) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #08 pc 005e14c1 /system/framework/arm/boot-core-libart.oat (offset 0x47e000) (java.lang.Daemons$FinalizerDaemon.run+380) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #09 pc 005f86ad /system/framework/arm/boot.oat (offset 0x56f000) (java.lang.Thread.run+48) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #10 pc 000a9241 /system/lib/libart.so (art_quick_invoke_stub_internal+64) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #11 pc 00406e69 /system/lib/libart.so (art_quick_invoke_stub+232) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #12 pc 000b0535 /system/lib/libart.so (_ZN3art9ArtMethod6InvokeEPNS_6ThreadEPjjPNS_6JValueEPKc+140) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #13 pc 0031636b /system/lib/libart.so (_ZN3artL18InvokeWithArgArrayERKNS_33ScopedObjectAccessAlreadyRunnableEPNS_9ArtMethodEPNS_8ArgArrayEPNS_6JValueEPKc+58) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #14 pc 00317119 /system/lib/libart.so (_ZN3art35InvokeVirtualOrInterfaceWithJValuesERKNS_33ScopedObjectAccessAlreadyRunnableEP8_jobjectP10_jmethodIDP6jvalue+256) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #15 pc 0032e319 /system/lib/libart.so (_ZN3art6Thread14CreateCallbackEPv+848) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #16 pc 00047f83 /system/lib/libc.so (_ZL15__pthread_startPv+22) 12-27 16:17:31.880 19174-19174/? A/DEBUG: #17 pc 0001a151 /system/lib/libc.so (__start_thread+6) 

有谁知道这里发生了什么,为什么这是崩溃?

编辑

DataSource是一个Object类,它是Kotlin中的一个Singleton类。 它是这样初始化的:

 public class MyApp extends MultiDexApplication { @Override public void onCreate() { //Initialize database DataSource.INSTANCE.setMyBd( Room.databaseBuilder(getApplicationContext(), MyDb.class, "my-db").build()); }} 

插入和删除只是从房间的注释:

 @Insert(onConflict = OnConflictStrategy.REPLACE) fun insert(logpoint: UserLogpoint) @Delete fun delete(logpoint: UserLogpoint) 

对不起,是你的时间。 正如你可能已经猜到的那样,问题在于别的。

问题出在对象的类本身。 因为房间不能解析他所不知道的物体,所以他不能解析它们。 因此,我放置了一个转换,就像这样做:

 @TypeConverter fun cast2(location: String) = Utils.General.deserializeFromJson(location,Location::class.java) @TypeConverter fun cast1(location: Location) = Utils.General.serializeToJson(location) 

但是,这不起作用,因为我不能这样序列化一个位置,我得到的错误是你在上面看到的。