Articles of parcelable

与Proguard混淆时的可分辨问题

我的应用程序在混淆之前工作正常,但是当我启用proguard时,我收到以下错误: 2013-05-02 13:43:58.772 E 30138/AndroidRuntime: FATAL EXCEPTION: main java.lang.NumberFormatException: Invalid long: “0.20” at java.lang.Long.invalidLong(Long.java:125) at java.lang.Long.parse(Long.java:362) at java.lang.Long.parseLong(Long.java:353) at java.lang.Long.parseLong(Long.java:319) at com.sourcetone.data.model.Station.long getId()(SourceFile:195) at com.sourcetone.STStationListFragment.void deleteStation(com.sourcetone.data.model.Station)(SourceFile:298) at com.sourcetone.STStationListFragment.void access$4(com.sourcetone.STStationListFragment,com.sourcetone.data.model.Station)(SourceFile:293) at com.sourcetone.STStationListFragment$ArrayListAdapter$1.void onClick(android.view.View)(SourceFile:274) at android.view.View.performClick(View.java:3528) at android.view.View$PerformClick.run(View.java:14217) at android.os.Handler.handleCallback(Handler.java:605) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4482) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561) at dalvik.system.NativeStart.main(Native […]

使用带有循环引用的Parcelable

Parcelable似乎没有优雅地处理像Serializable那样的循环引用。 在下面的示例中,Bar的序列化工作正常,但将其写入Parcel会导致堆栈溢出: I/TestRunner( 1571): java.lang.StackOverflowError I/TestRunner( 1571): at android.os.Parcel.writeParcelable(Parcel.java:1106) I/TestRunner( 1571): at android.os.Parcel.writeValue(Parcel.java:1029) I/TestRunner( 1571): at com.XXX.util.ParcelableTest$Bar.writeToParcel(ParcelableTest.java:209) I/TestRunner( 1571): at android.os.Parcel.writeParcelable(Parcel.java:1106) I/TestRunner( 1571): at android.os.Parcel.writeValue(Parcel.java:1029) I/TestRunner( 1571): at com.XXX.util.ParcelableTest$Baz.writeToParcel(ParcelableTest.java:246) I/TestRunner( 1571): at android.os.Parcel.writeParcelable(Parcel.java:1106) I/TestRunner( 1571): at android.os.Parcel.writeValue(Parcel.java:1029) I/TestRunner( 1571): at com.XXX.util.ParcelableTest$Bar.writeToParcel(ParcelableTest.java:209) I/TestRunner( 1571): at android.os.Parcel.writeParcelable(Parcel.java:1106) I/TestRunner( 1571): at android.os.Parcel.writeValue(Parcel.java:1029) public void testCircular() throws Exception { […]

使用新版YouTube时,YouTube Android Player API会在“解组:asc”时抛出“BadParcelableException ClassNotFoundException”

向YouTube Android Player API库工程师提交错误:请参阅android–youtube-api标记 在过去一周半的过程中,我注意到这个奇怪的BadParcelableException在我们的应用程序中稳步增长,并将其钉在了Android的Android新版本上。 如果您的应用正在播放YouTubevideo,将您的应用带到后台,强制停止Youtube应用并再次恢复您的应用,则会发生此崩溃。 在Youtube版本12.19.56上可以重现崩溃。 还在较旧的YouTube版本12.05.21上进行了测试,但崩溃并不存在。 堆栈跟踪: main Exception: Unable to start activity ComponentInfo{com.myapp.MainActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: asc Stack: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.MainActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: asc at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6121) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused […]

如何在kotlin @Parcelize中使用null

这是非常简单的代码: @Parcelize data class Inner(val a: Int): Parcelable @Parcelize data class Test(val a: Int, val inner: Inner?): Parcelable @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun testParcel() { val test = Test(0, null) val parcel = Parcel.obtain() parcel.writeParcelable(test, test.describeContents()) } } 我有可空属性Test.inner 。 如果它不为null,代码工作正常,但是当它为null时,我有例外: java.lang.NullPointerException: Attempt to invoke interface method ‘void android.os.Parcelable.writeToParcel(android.os.Parcel, int)’ on a null object […]

如何为包含List <List >的类实现Parcelable?

除了List<List>之外,我的Parcelable类中的所有字段都有一个可用的Parcelable实现 class Employee implements Parcelable { List<List> details; //……. protected Employee(Parcel in) { details = new ArrayList<List>(); // i know this is wrong just posting to clarify in.readList(details, List.class.getClassLoader()); //…… } public void writeToParcel(Parcel dest, int flags) { dest.writeList(details); //….. } public int describeContents() { return 0; } public static final Parcelable.Creator CREATOR = new […]

Android – 将Parcelable数据保存到文件中

我曾经使用Serializable对象将它们保存在filesytem中并读取它们以便做任何我想做的事情。 但是当你必须在活动之间传递数据时,序列化很慢,所以我读了比推荐使用Parcelable。 然后我做了,是的,它更快! 但现在,我有一点问题。 由于Parcelable针对IPC进行了优化,因此它们不可序列化,无法保存到文件中。 所以我想知道是否可以这样做。 此外,如果我决定为我的类实现Parcelable和Serializable接口,但只使用Parcelable在我的活动之间传递数据,我将能够将类保存到文件中。 但我想,因为我使用serializable(只保存,不传递数据),这不是一个好主意哼哼? 我也想过使用Gson库,从类中序列化数据,并将JSON保存到文件中,并重用Gson反序列化JSON以获取我的Parcelable对象。 这似乎是个好主意吗? 性能怎么样? 感谢大家的回答! J.

BadParcelableException – BroadcastReceiver意图崩溃

这个错误似乎偶尔会发生,这很奇怪。 它通常很好,但偶尔会爬起来。 这是我的代码,它位于BroadcastReceiver中: public void onReceive(Context context, Intent intent) { MyCustomResponseMsg message = new MyCustomResponseMsg((MyMessage) intent.getParcelableExtra(MyMessage.EXTRA_MESSAGE_KEY)); // do stuff with the message setResultCode(Activity.RESULT_OK); } 以下是例外情况: 01-16 10:05:03.834: ERROR/AndroidRuntime(13533): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start receiver com.(path-to-broadcast-receiver).MyReqReceiver: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.(path-to-my-message).MyMessage at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805) at android.app.ActivityThread.access$2400(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3683) at […]

Parcelableinheritance:抽象类 – 哪个CREATOR?

我有一个实现Parcelable的抽象类A 我有一个B级和一个C级,他们都扩展了A 我怎样才能让它们变得可以哄骗? 因为我可以链接它并在A和B提供CREATOR ,就像很多post中建议的那样。 但由于我有其他对象存储ABC类并实现Parcelable自己,这种方法似乎不起作用,因为当我想传递A的ArrayList时,我必须在types列表中使用CREATOR ArrayList elements = new ArrayList(); in.readTypedList(elements , B.CREATOR); // B.CREATOR? C.CREATOR??? 这显然没有意义。 那么我怎样才能正确制作A Parcelable? 即我想使这个类Parcelable所以我可以以一种常见的方式引用A. 一个) public abstract class A implements Parcelable { final String globalVar; public A(String globalVar) { this.globalVar = globalVar; } } B) public class B extends A { String bVar; public B(String global, String bVar) […]

android parcelable引用另一个parcelable循环依赖

相当简单的场景,但我在Google上找不到任何相关内容,所以这里有: class ContainerClass implements Parcelable { List _items; (…) public void writeToParcel( Parcel p, int args ) { p.writeList( _items ); (…) } } class ItemClass implements Parcelable { ContainerClass _containerRef; (…) public void writeToParcel( Parcel p, int args ) { p.writeParcelable( _containerRef ); (…) } } 这将不可避免地循环并溢出堆栈。 我的问题:我应该如何处理我必须将上述types的对象传递给新Activity的情况。 (对于CommonsWare)Parcelable实现确实似乎没有检查,并避免循环依赖。 具有由上述名称替换的类名的Stacktrace: 08-12 10:17:45.233 5590-5590/com.package E/AndroidRuntime: […]

Parcelable,newArray是什么?

我正在实现Parcelable,以便在整个Intent中传输一些简单的数据。 但是,Parcelable接口中有一个我根本无法理解的方法: newArray() 。 它没有任何相关文档,甚至在我包裹/删除我的对象时甚至没有在我的代码中调用它。 示例Parcelable实现: public class MyParcelable implements Parcelable { private int mData; public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(mData); } public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() { public MyParcelable createFromParcel(Parcel in) { return new MyParcelable(in); } public MyParcelable[] newArray(int size) { return […]