나는 parcelable이 뭔가 비밀을 숨기고 있지만, 내가 그들을 알아야한다고 생각하지 않았다는 것을 알았습니다. 여기 readBooleanArray throws RuntimeException ("잘못된 배열 길이")
내가 전에했던 코드 : 어떻게 든 내 제외한 대부분의 장치에서 작동하지...
parcel.writeBooleanArray(new boolean[]{booleanValue1, booleanValue2, booleanValue3});
....
boolean[] booleans = new boolean[3];
in.readBooleanArray(booleans);
...
, 그래서 나는 그것을 재현 할 수 있습니다. 소포의
...
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);
....
소스 코드 :
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");
}
}
로그 캣 오류 :
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)
그래서 내 생각 엔 난에 코드를 변경해야 할 :
그럼으로 변경하기로 결정...
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);
....
하지만 도움이 될까요?
또한 Parcel.createBooleanArray()의 사용법은 부울 []을 반환합니다. 어쩌면 내가이 방법을 통해 부울 배열을 만들고 writeBooleanArray (부울 [])를 사용해야합니까? 하지만 그것은 나에게 이해가되지 않습니다 ... 왜 일부 장치에서 작동하고 다른 장치에서는 작동하지 않습니다 ...
미리 감사드립니다.
그냥 createBooleanArray 메서드를 사용하려고했는데 %가 무엇인지 이해하지 못했습니다. –