Git Product home page Git Product logo

serialize's Introduction

原来你也玩原神啊?    

点击开喷

原神, 启动!


『 全部开源项目 』 『 在线简历 』 『 加入我们 』


一个人的技术是有限的



项目 描述
Net 🍉 Android 最强大的创新式协程并发网络请求 GitHub Repo stars
BRV 🌽 Android 最强大的RecyclerView库, 比BRVAH更优雅和强大 GitHub Repo stars
soft-input-event Android软键盘遮挡/平滑动画最佳解决方案 GitHub Repo stars
DrakeTyporaTheme 最好的Typora主题 GitHub Repo stars
spannable Android最好的Spannable构建工具, 首个支持正则匹配/GIF动画/图文混排 GitHub Repo stars
Interval Android计时器工具, 倒计时/正计时/开始/暂停/继续/结束/取消 GitHub Repo stars
Serialize 应用数据存储的神器, 比SQLite/SP更方便, 可创建自动本地读写/应用销毁恢复的字段, GitHub Repo stars
StateLayout 一行代码构建整个应用的缺省页 GitHub Repo stars
StatusBar 🍥 Android 一行代码配置透明状态栏 GitHub Repo stars
Channel 优雅的事件消息框架 🍯 LiveData / Coroutine / 生命周期 特性 EventBus GitHub Repo stars
Tooltip Toast(吐司)BubbleDialog(菊花加载框) GitHub Repo stars
debugKit 开发调试悬浮窗口工具 GitHub Repo stars
LogCat 日志输出工具 GitHub Repo stars
Engine 快速开发基础库 GitHub Repo stars
SougouSkin 简约的搜狗输入法皮肤
简历模板 快速生成简洁的个人简历(部署在线简历) 在线预览
PTCode 为PT Mono添加连字特性(Ligatures)
PlexMono ibm-plex添加连字特性(Ligatures)
cascadia-code-patch 修改cascadia-code字符
JetBrainsMono-patch 修改JetBrainsMono字符

serialize's People

Contributors

liangjingkanji avatar tomatowithegg avatar txca avatar yptang97 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

serialize's Issues

使用动态键名的默认值并没有进行隔离?

var sceneMusic: Boolean by serialLazy(true, name = "scene_music_${globalMac.toMac()}_${userInfoId}")

当我第一次改变他的值为false 接着 我改变 动态键名的 变量的值,这时候再去读取值,动态键名变量已经改了,这时候读取的不应该是默认值true吗?但是读取出来的 还是 上一个动态键名的 值 false

serialLiveData在子线程获取value时异常

java.lang.IllegalStateException: Cannot invoke setValue on a background thread
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:487)
at androidx.lifecycle.LiveData.setValue(LiveData.java:306)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
at com.drake.serialize.serialize.SerializeLiveDataDelegate.getValue(SerializeDelegate.kt:149)
at com.drake.serialize.serialize.SerializeLiveDataDelegate.getValue(SerializeDelegate.kt:117)

界面传递参数可以支持onActivityResult结果获取吗

目前使用官方新推出的api感觉使用起来有点麻烦😂我想要是能用你提供的界面传递参数跳转Activity的写法,在后面加个大括号,用lambda表达式的写法获取到返回的数据执行后续操作就好了🤔

集合无法保存数据

@parcelize
data class MtbAStdTFEntity(
var CurrentMax: Double = 0.0,
var CurrentMin: Double = 0.0,
var Duration: Int = 0,
var Freq: Int = 0,
var item: Int = 0
) : Parcelable

object MtbaSet {
var listStdTF : MutableList by serialLazy()
}

通过对listStdTF赋值后发现只是内存中数据改,没有保存到磁盘,app重启启动时候没有数据,是否用法有问题

请问这是哪里出错了

@SerializeConfig(mmapID = "app_config")
object ViewConfig {
    private val def = Position(0f, 0f)
    var textV: Position by serial(default =def)


    data class Position(var x: Float, var y: Float) : Serializable {
        companion object {
            private const val serialVersionUID = -7L
        }
    }
}

读取直接

ViewConfig.textV.x

赋值是

val viewConfig = ViewConfig
viewConfig.textV.x = x
viewConfig.textV.y = y

但是这样并不能写入数据,这是哪里出错了

一点小建议

首先这是个很棒的库,我们项目也使用kotlin委托实现了读写变量自动保存本地的功能,但是没有提供可观察的LiveData,楼主提供了很好的思路。但是有个小问题和楼主交流一下:

SharedPreferences/MMKV/DataStore设计本意就是存储轻量级的key-value数据,直接提供hook来序列化复杂数据是否违背了初衷呢?个人认为,对于重要的结构化数据,数据库是首选,轻量级数据使用SP/MMKV,但对于一些不需要数据库建表那么重,又不适合直接存SP的数据,做本地文件缓存是比较合适的。

所以,是否可以再抽象一下,

  1. 上层依赖接口,不依赖MMKV,可以提供默认的MMKV实现
  2. 把轻量级的KV数据和结构化的数据分开来,比如分为property和storage,property数据不提供序列化功能,storage底层使用文件缓存,提供SerializeHook

改变状态后立马杀掉进程,重新打开APP,状态又变成默认值

我有个引导页,执行完引导页后,改变Flag,然后立马杀掉进程,重新打开APP 又重新出现引导页了,打印值,又变成默认值,目前就是第一次会出现,第二次杀进程再进入APP就是正常,这是必现。
我使用的是动态键名:
// 是否显示P80引导页 var isShowHomeGuideP80: Boolean by serialLazy(true,"isShowHomeGuideP80_${userId}")

serial使用命名的规则有问题

存储数据key的问题

命名规则的逻辑,key的前缀使用类名拼接属性的名称,通过mmkv存储到磁盘的数据,只能在存储的当前页面使用,而其他页面因为类名不同,无法获取到通过mmkv存入到磁盘的数据。代码如下:

 override fun setValue(thisRef: Any?, property: KProperty<*>, value: V) {
        // 使用代理的对象的 class 名称
        val className = thisRef?.javaClass?.name
        // 属性名称或者自定义名称
        var adjustKey = name ?: property.name 
        // adjustKey 和使用代理的类绑定了,导致其他类无法获取到 adjustKey 
        // 除非提前知道哪个代理存储了数据,手动拼接代理类的className + name ,当然这种方式不现实。
        if (className != null) adjustKey = "${className}.${adjustKey}"
        kv.serialize(adjustKey to value)
    }

    override fun getValue(thisRef: Any?, property: KProperty<*>): V {
        val className = thisRef?.javaClass?.name
        var adjustKey = name ?: property.name
        if (className != null) adjustKey = "${className}.${adjustKey}"
        return if (default == null) {
            kv.deserialize(adjustKey)
        } else {
            kv.deserialize<V>(adjustKey, default)
        }
    }

重启应用后,保存的对象为空了

我的项目正在使用 kotlinx.serialization,有这样一个类:
@Serializable data class LoginDto( @SerialName("accountId") val accountId: String?, @SerialName("address") val address: String?, @SerialName("appRole") val appRole: String? )
这应该就是算序列化了吧? 但是保存之后当时有效,但是当我退出应该重新进入APP,这时候对象就是获取为空了。

App版本升级后,所有数据全没了

开始我还以为 是我代码问题,反复确认了好多遍问题还是出在 这个本地存储上,我的登录状态是是用这个来保存的 但是版本升级覆盖安装后,好像所有保存的值全没了,本来登录过了,覆盖安装后又重新进入了登录页面

每次覆盖安装应用后,数据模型集合都会变成默认值

这是保存在Serialize里的数据

var ConfigList: ArrayList<Model> by serialLazy(
        arrayListOf(
            PrintModel("", true, true),
            PrintModel("", true,  true),
            PrintModel("",  true, true)
        )
    )

这是修改数据后重新保存的操作

AppConfig.ConfigList = adapter.data as ArrayList<Model>

每次打开app后数据是没问题的,但是覆盖安装后数据就没了,请问是这样写的吗😂

取值的时候报错,我们存储的都是基本类型,没有存储Serializable或者Parcelable实例,麻烦大佬看看

java.io.StreamCorruptedException

invalid stream header: 7400000E

解析原始

1
java.lang.RuntimeException:java.lang.reflect.InvocationTargetException
2
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:558)
3
......
4
Caused by:
5
java.io.StreamCorruptedException:invalid stream header: 7400000E
6
java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:863)
7
java.io.ObjectInputStream.<init>(ObjectInputStream.java:354)
8
com.drake.serialize.serialize.SerializeHook$DefaultImpls.deserialize(SerializeHook.java:79)
9
com.drake.serialize.serialize.SerializeHook$DEFAULT.deserialize(SerializeHook.java:21)
10
com.drake.serialize.serialize.SerializeKt.deserialize(SerializeKt.java:68)
11
com.drake.serialize.serialize.delegate.SerialLazyDelegate.getValue(SerialLazyDelegate.java:52)
12
com.video.videochat.constants.AppConfigData.getAppLanguage(AppConfigData.java:31)
13
com.video.videochat.user.bean.RegisterReqBean.<init>(RegisterReqBean.java:27)
14
com.video.videochat.user.ui.LoginActivity$onClick$1$1.invoke(LoginActivity.java:126)
15
com.video.videochat.user.ui.LoginActivity$onClick$1$1.invoke(LoginActivity.java:125)
16
com.video.videochat.user.ui.LoginActivity.judgeAgreement(LoginActivity.java:158)
17
com.video.videochat.user.ui.LoginActivity.onClick(LoginActivity.java:125)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.