AndroidDev 板


LINE

※ 引述《mysteriousGE ( )》之铭言: : 该如何使用Intent传递复杂的参数? : Google了一下 : 不外乎是让要传递的物件类别 implements Serializable 或 Parcelable : 我测试了一下,当要传递的物件类别「够简单」才可以这样实做 : 例如 该类别中仅仅包含有 String boolean int....型态的变数 : 我想要传递的物件类别中 包含有很多我自己定义的class 物件 : 若 implements Serializable 会发生Runtime error 无法传递 : 若 implements Parcelable writeToParcel的 Function 会相当复杂 : 不知该如何实做..... : 请问还有其他解法吗? Orz : 感谢! 目前来讲应该是很少Serializable不能传的 只是麻烦而以...er...不对,Serializable应该是最简单的才对 一个东西要能Serializable要满足两个条件 1. 自己本身要implements Serializable并且产生UID (请务必在Compile time自己做,不自己做的话每个版本的JVM都会帮你算出不同的ID 然後你拿OSX编出来的jar到win下用就炸了) 2. 自己旗下所有的field都要能Serializable,不想被Serialize的一定要 加上transient关键字 其实大概就这两点. 1的话其实不用多讲,大家都是被Eclipse宠坏的小孩,所以Eclipse提醒以及帮你搞定 请选择generate ID而非用一个-1L当作default ID 2的话可能复杂点,要分几个层面来讲。 第一个层面就是大多数我们习惯使用的非指定实作界面(简单来讲,比方说List<>) 多半都没办法用在Field上了,我们没有办法在implements才决定要使用哪种List (List可不是只有ArrayList,有LinkedArrayList, 还有极重要的CopyOnWriteArrayList) 我们必须要field宣告的时候就得宣告「serializable的list」(上面几种都有) 而没办法空泛地写List<String> theField;(List是non-serializable) 所以这种写法将没办法再继续使用 List<String> theField; A() { theField = ArrayList<String>(); } 这应该是Serializable最大的问题....反正,碰到就查docs.oracle.com/java 看他有没有implement Serializable即可 http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html 比方说ArrayList,看All implemented interfaces : 恩有Seriablizable 所以他是可以当作serialize的 第二个层面则是延续第一个层面,他所有field都要Serializable,包含custom class 那custom class之所以要serializable,代表它旗下的所有field也要serializable 所以你必须一层层的implements Serializable并且做第一层面的事情 这个改动会颇大...不过反正runtime exception会告诉你哪里还没搞定 Serializable应该是最方便的东西之一,但是会造成整个结构很死,尤其是继承其他 界面实作出来的class。它妙用可不止在intent之间传递,它可以非常简单的直接写成 档案甚至被当成stream经由socket网路传送出去(对方当然要知道怎麽解译)。因为它 实在太好用了,所以常常会有被滥用的情况发生... 比方serializable class说写入档案 (某Serializable class的instance叫做item) ObjectOutputStream obj_out = new ObjectOutputStream(new FileOutputStream( new File(MY_DESTINATION_FILE))); obj_out.writeObject(item); obj_out.flush(); obj_out.close(); 你没看错,四行搞定(折行算一行) 比方说从档案读入class ObjectInputStream obj_in = new ObjectInputStream(new FileInputStream( new File(MY_TARGET_FILE))); ret = obj_in.readObject(); obj_in.close(); 恩,三行搞定,注意ret是object,要自己强制转型成自己要的class 既然都有Object Stream了,那把它丢进socket也不过分吧?这个自己try了 不过我个人是不太喜欢Serializable啦,他有一定程度上的型别以及其它问题 (有人愿意开个串说明一下Serializable的问题吗? XD) 但是对大多数人来讲,这是一个相当有吸引力的选择。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.41.125.80
1F:→ Killercat:附赠bonus http://paste.ideaslabs.com/show/tudjjJRFmf 08/18 13:27
2F:→ Killercat:有效期限只有一个月 请自行取用 08/18 13:27







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP