- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序崩溃,除了出现此错误外,没有任何堆栈跟踪:
A/libc: Fatal signal 11 (SIGSEGV), code 128, fault addr 0x0 in tid 12680 (dio.downloadapp)
val details = gson.fromJson(fileReader, VideoDetails::class.java)
private fun onVideoDetailsFetched() {
try {
val file = File(context.filesDir, QUEUE_VIDEO_DETAILS_FILE)
val fileReader = FileReader(file)
val details = gson.fromJson(fileReader, VideoDetails::class.java)
videoDetails.send(details)
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun VideoDetails.saveVideoDetails() {
val json = gson.toJson(this)
File(applicationContext.filesDir, VIDEO_DETAILS_FILE).writeText(json)
}
VideoDetails
只是一个带有一串字符串和一个位图的数据类:
data class VideoDetails(
val filename: String? = null,
val title: String? = null,
val vcodec: String? = null,
val acodec: String? = null,
val duration: String? = null,
val filesize: String? = null,
val width: String? = null,
val height: String? = null,
val bitrate: String? = null,
val framerate: String? = null,
val encoder: String? = null,
val encodedBy: String? = null,
val date: String? = null,
val creationTime: String? = null,
val artist: String? = null,
val album: String? = null,
val albumArtist: String? = null,
val track: String? = null,
val genre: String? = null,
val composer: String? = null,
val performer: String? = null,
val copyright: String? = null,
val publisher: String? = null,
val language: String? = null,
var thumbnail: Bitmap? = null
)
Gson.fromJson()
时发生。前两次,它工作正常。
最佳答案
根本原因是VideoDetails
数据类中的位图。显然,Gson无法处理位图。我决定不删除位图,而是为TypeAdapter
创建一个自定义 VideoDetails
。这样,我不必更改VideoDetails
类,因此不必更改代码的许多部分。
完整代码:
class VideoDetailsTypeAdapter : TypeAdapter<VideoDetails?>() {
override fun write(out: JsonWriter?, value: VideoDetails?) {
value?.apply {
out?.apply {
beginObject()
filename?.let { name(FILENAME).value(it) }
title?.let { name(TITLE).value(it) }
vcodec?.let { name(VCODEC).value(it) }
acodec?.let { name(ACODEC).value(it) }
duration?.let { name(DURATION).value(it) }
filesize?.let { name(FILESIZE).value(it) }
width?.let { name(WIDTH).value(it) }
height?.let { name(HEIGHT).value(it) }
bitrate?.let { name(BITRATE).value(it) }
framerate?.let { name(FRAMERATE).value(it) }
encoder?.let { name(ENCODER).value(it) }
encodedBy?.let { name(ENCODED_BY).value(it) }
date?.let { name(DATE).value(it) }
creationTime?.let { name(CREATION_TIME).value(it) }
artist?.let { name(ARTIST).value(it) }
album?.let { name(ALBUM).value(it) }
albumArtist?.let { name(ALBUM_ARTIST).value(it) }
track?.let { name(TRACK).value(it) }
genre?.let { name(GENRE).value(it) }
composer?.let { name(COMPOSER).value(it) }
performer?.let { name(PERFORMER).value(it) }
copyright?.let { name(COPYRIGHT).value(it) }
publisher?.let { name(PUBLISHER).value(it) }
language?.let { name(LANGUAGE).value(it) }
thumbnail?.let {
name(THUMBNAIL).beginArray()
val pixelInts = IntArray(it.width * it.height)
it.getPixels(pixelInts, 0, it.width, 0, 0, it.width, it.height)
val storeInts = IntArray(pixelInts.size + 2)
pixelInts.copyInto(storeInts, 0, 0, pixelInts.size)
storeInts[storeInts.size - 2] = it.width
storeInts[storeInts.size - 1] = it.height
for (int in storeInts)
value(int)
endArray()
}
endObject()
}
}
}
override fun read(`in`: JsonReader?): VideoDetails? {
return `in`?.run {
beginObject()
val entries = Array<String?>(24) { null }
var thumbnail: Bitmap? = null
while (hasNext()) {
when (nextName()) {
FILENAME -> entries[0] = nextString()
TITLE -> entries[1] = nextString()
VCODEC -> entries[2] = nextString()
ACODEC -> entries[3] = nextString()
DURATION -> entries[4] = nextString()
FILESIZE -> entries[5] = nextString()
WIDTH -> entries[6] = nextString()
HEIGHT -> entries[7] = nextString()
BITRATE -> entries[8] = nextString()
FRAMERATE -> entries[9] = nextString()
ENCODER -> entries[10] = nextString()
ENCODED_BY -> entries[11] = nextString()
DATE -> entries[12] = nextString()
CREATION_TIME -> entries[13] = nextString()
ARTIST -> entries[14] = nextString()
ALBUM -> entries[15] = nextString()
ALBUM_ARTIST -> entries[16] = nextString()
TRACK -> entries[17] = nextString()
GENRE -> entries[18] = nextString()
COMPOSER -> entries[19] = nextString()
PERFORMER -> entries[20] = nextString()
COPYRIGHT -> entries[21] = nextString()
PUBLISHER -> entries[22] = nextString()
LANGUAGE -> entries[23] = nextString()
THUMBNAIL -> {
beginArray()
val intList = mutableListOf<Int>()
while (hasNext())
intList.add(nextInt())
endArray()
val storeInts = intList.toIntArray()
val pixelInts = IntArray(storeInts.size - 2)
storeInts.copyInto(pixelInts, 0, 0, storeInts.size - 2)
val width = storeInts[storeInts.size - 2]
val height = storeInts[storeInts.size - 1]
thumbnail = Bitmap.createBitmap(pixelInts, width, height, Bitmap.Config.ARGB_8888)
}
}
}
endObject()
VideoDetails(
entries[0],
entries[1],
entries[2],
entries[3],
entries[4],
entries[5],
entries[6],
entries[7],
entries[8],
entries[9],
entries[10],
entries[11],
entries[12],
entries[13],
entries[14],
entries[15],
entries[16],
entries[17],
entries[18],
entries[19],
entries[20],
entries[21],
entries[22],
entries[23],
thumbnail
)
}
}
companion object {
const val FILENAME = "filename"
const val TITLE = "title"
const val VCODEC = "vcodec"
const val ACODEC = "acodec"
const val DURATION = "duration"
const val FILESIZE = "filesize"
const val WIDTH = "width"
const val HEIGHT = "height"
const val BITRATE = "bitrate"
const val FRAMERATE = "framerate"
const val ENCODER = "encoder"
const val ENCODED_BY = "encodedBy"
const val DATE = "date"
const val CREATION_TIME = "creationTime"
const val ARTIST = "artist"
const val ALBUM = "album"
const val ALBUM_ARTIST = "albumArtist"
const val TRACK = "track"
const val GENRE = "genre"
const val COMPOSER = "composer"
const val PERFORMER = "performer"
const val COPYRIGHT = "copyright"
const val PUBLISHER = "publisher"
const val LANGUAGE = "language"
const val THUMBNAIL = "thumbnail"
}
}
IntArray
,然后它包含位图中每个像素的Int值以及位图的宽度和高度,作为该数组的最后两个条目。然后将此
IntArray
转换为
Json
。将其转换回Bitmap只需逆转此过程即可。
TypeAdapter
注册到
Gson
。
private val gson = GsonBuilder()
.registerTypeAdapter(VideoDetails::class.java, VideoDetailsTypeAdapter())
.create()
关于android - 使用Gson时,TID 12680中的致命信号11(SIGSEGV),代码128,故障加法器0x0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60185298/
SQLite、Content provider 和 Shared Preference 之间的所有已知区别。 但我想知道什么时候需要根据情况使用 SQLite 或 Content Provider 或
警告:我正在使用一个我无法完全控制的后端,所以我正在努力解决 Backbone 中的一些注意事项,这些注意事项可能在其他地方更好地解决......不幸的是,我别无选择,只能在这里处理它们! 所以,我的
我一整天都在挣扎。我的预输入搜索表达式与远程 json 数据完美配合。但是当我尝试使用相同的 json 数据作为预取数据时,建议为空。点击第一个标志后,我收到预定义消息“无法找到任何内容...”,结果
我正在制作一个模拟 NHL 选秀彩票的程序,其中屏幕右侧应该有一个 JTextField,并且在左侧绘制弹跳的选秀球。我创建了一个名为 Ball 的类,它实现了 Runnable,并在我的主 Draf
这个问题已经有答案了: How can I calculate a time span in Java and format the output? (18 个回答) 已关闭 9 年前。 这是我的代码
我有一个 ASP.NET Web API 应用程序在我的本地 IIS 实例上运行。 Web 应用程序配置有 CORS。我调用的 Web API 方法类似于: [POST("/API/{foo}/{ba
我将用户输入的时间和日期作为: DatePicker dp = (DatePicker) findViewById(R.id.datePicker); TimePicker tp = (TimePic
放宽“邻居”的标准是否足够,或者是否有其他标准行动可以采取? 最佳答案 如果所有相邻解决方案都是 Tabu,则听起来您的 Tabu 列表的大小太长或您的释放策略太严格。一个好的 Tabu 列表长度是
我正在阅读来自 cppreference 的代码示例: #include #include #include #include template void print_queue(T& q)
我快疯了,我试图理解工具提示的行为,但没有成功。 1. 第一个问题是当我尝试通过插件(按钮 1)在点击事件中使用它时 -> 如果您转到 Fiddle,您会在“内容”内看到该函数' 每次点击都会调用该属
我在功能组件中有以下代码: const [ folder, setFolder ] = useState([]); const folderData = useContext(FolderContex
我在使用预签名网址和 AFNetworking 3.0 从 S3 获取图像时遇到问题。我可以使用 NSMutableURLRequest 和 NSURLSession 获取图像,但是当我使用 AFHT
我正在使用 Oracle ojdbc 12 和 Java 8 处理 Oracle UCP 管理器的问题。当 UCP 池启动失败时,我希望关闭它创建的连接。 当池初始化期间遇到 ORA-02391:超过
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve
引用这个plunker: https://plnkr.co/edit/GWsbdDWVvBYNMqyxzlLY?p=preview 我在 styles.css 文件和 src/app.ts 文件中指定
为什么我的条形这么细?我尝试将宽度设置为 1,它们变得非常厚。我不知道还能尝试什么。默认厚度为 0.8,这是应该的样子吗? import matplotlib.pyplot as plt import
当我编写时,查询按预期执行: SELECT id, day2.count - day1.count AS diff FROM day1 NATURAL JOIN day2; 但我真正想要的是右连接。当
我有以下时间数据: 0 08/01/16 13:07:46,335437 1 18/02/16 08:40:40,565575 2 14/01/16 22:2
一些背景知识 -我的 NodeJS 服务器在端口 3001 上运行,我的 React 应用程序在端口 3000 上运行。我在 React 应用程序 package.json 中设置了一个代理来代理对端
我面临着一个愚蠢的问题。我试图在我的 Angular 应用程序中延迟加载我的图像,我已经尝试过这个2: 但是他们都设置了 src attr 而不是 data-src,我在这里遗漏了什么吗?保留 d
我是一名优秀的程序员,十分优秀!