我知道parcelable是隐藏着什么秘密,但没想到,我需要了解他们,单元1了。
I knew that parcelable are hide something secret, but didn't thought that i need to know them, unitl now.
下面是code我面前:
Here is the code i had before:
...
parcel.writeBooleanArray(new boolean[]{booleanValue1, booleanValue2, booleanValue3});
....
boolean[] booleans = new boolean[3];
in.readBooleanArray(booleans);
...
不知怎的,它会停止工作,除非我的许多设备,所以我不能复制。于是我决定将其改为:
Somehow it stops working on many devices except my, so i can't reproduce it. Then i decided to change it to:
...
parcel.writeBooleanArray(new boolean[]{booleanValue1});
parcel.writeBooleanArray(new boolean[]{booleanValue2});
parcel.writeBooleanArray(new boolean[]{booleanValue3});
...
boolean[] booleans1 = new boolean[1];
boolean[] booleans2 = new boolean[1];
boolean[] booleans3 = new boolean[1];
in.readBooleanArray(booleans1);
in.readBooleanArray(booleans2); // it crashes here
in.readBooleanArray(booleans3);
....
包裹的来源$ C $ C:
Source code of Parcel:
public final void readBooleanArray(boolean[] val) {
int N = readInt();
if (N == val.length) {
for (int i=0; i<N; i++) {
val[i] = readInt() != 0;
}
} else {
throw new RuntimeException("bad array lengths");
}
}
LogCat中的错误:
LogCat errors:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my/com.my.activities.MyActivity}: java.lang.RuntimeException: bad array lengths
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
at android.app.ActivityThread.access$600(ActivityThread.java:128)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4517)
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:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: bad array lengths
at android.os.Parcel.readBooleanArray(Parcel.java:619)
所以,我想我需要改变code到:
So my guess that i need to change the code to:
...
parcel.writeBooleanArray(new boolean[]{booleanValue1, booleanValue2, booleanValue3});
....
boolean[] booleans1 = new boolean[1];
boolean[] booleans2 = new boolean[1];
boolean[] booleans3 = new boolean[1];
in.readBooleanArray(booleans1);
in.readBooleanArray(booleans2);
in.readBooleanArray(booleans3);
....
但它会帮助吗?
But will it help?
还有什么Parcel.createBooleanArray()返回的使用布尔[];也许我需要通过这个方法来创建布尔数组,然后使用writeBooleanArray(布尔[])?但它并没有什么意义,我...为什么它的工作在某些设备上,并没有对其他...
Also what is the usage of Parcel.createBooleanArray() returns boolean[]; Maybe i need to create boolean array via this method and then use writeBooleanArray(boolean[])? But it doesn't make sense to me... why it's working on some devices and doesn't on other...
在此先感谢。
其实我发现我的问题的解决方案,但在另一个没有回答question:
Actually i found solution for my problem, but not answer in another question:
在这里,在Pracelable是如何工作的,您用布尔值:
Here is how can You work with booleans in Pracelable:
.....
// Write:
out.writeByte((byte) (booleanValue ? 1 : 0));
....
// Read:
boolValue = in.readByte() == 1;