Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包返回空布尔数组_Java_Android_Arrays_Boolean_Parcelable - Fatal编程技术网

Java 包返回空布尔数组

Java 包返回空布尔数组,java,android,arrays,boolean,parcelable,Java,Android,Arrays,Boolean,Parcelable,我创建了一个包含布尔数组的可包裹对象 public class Alarm implements Parcelable { private int hours; private int minutes; private int alarmTime; private int ID; private boolean alarmSet; private boolean[] days; private String[] symbols; private String sound; private bo

我创建了一个包含布尔数组的可包裹对象

public class Alarm implements Parcelable {

private int hours;
private int minutes;
private int alarmTime;
private int ID;
private boolean alarmSet;
private boolean[] days;
private String[] symbols;
private String sound;
private boolean snooze;
private String picture;

public Alarm() {
    days = new boolean[7];
    symbols = new String[]{"月","火","水","木","金","土","日","毎日"};
}

protected Alarm(Parcel in) {
    hours = in.readInt();
    minutes = in.readInt();
    alarmTime = in.readInt();
    in.readBooleanArray(days);
    ID = in.readInt();
    alarmSet = in.readByte() != 0x00;
    sound = in.readString();
    snooze = in.readByte() != 0x00;
    symbols = new String[]{"月","火","水","木","金","土","日","毎日"};
    picture = in.readString();
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(hours);
    dest.writeInt(minutes);
    dest.writeInt(alarmTime);
    dest.writeInt(ID);
    dest.writeBooleanArray(days);
    dest.writeByte((byte) (alarmSet ? 0x01 : 0x00));
    dest.writeString(sound);
    dest.writeByte((byte) (snooze ? 0x01 : 0x00));
    dest.writeString(picture);
}

public static final Parcelable.Creator<Alarm> CREATOR = new Parcelable.Creator<Alarm>() {
    @Override
    public Alarm createFromParcel(Parcel in) {
        return new Alarm(in);
    }
    @Override
    public Alarm[] newArray(int size) {
        return new Alarm[size];
    }
};
我认为我遵循了创建可包裹对象的正确方法,大多数值似乎都很好(没有检查所有值)

这是航海日志

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.test.alarm/com.android.test.alarm.AlarmSettings}: java.lang.NullPointerException: Attempt to get length of null array
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
                                                                        at android.app.ActivityThread.access$800(ActivityThread.java:155)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                        at android.os.Looper.loop(Looper.java:135)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5343)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at java.lang.reflect.Method.invoke(Method.java:372)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
                                                                     Caused by: java.lang.NullPointerException: Attempt to get length of null array
                                                                        at android.os.Parcel.readBooleanArray(Parcel.java:807)
                                                                        at com.android.test.alarm.Alarm.<init>(Alarm.java:149)
                                                                        at com.android.test.alarm.Alarm$1.createFromParcel(Alarm.java:181)
                                                                        at com.android.test.alarm.Alarm$1.createFromParcel(Alarm.java:178)
                                                                        at android.os.Parcel.readParcelable(Parcel.java:2252)
                                                                        at android.os.Parcel.readValue(Parcel.java:2152)
                                                                        at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
                                                                        at android.os.BaseBundle.unparcel(BaseBundle.java:221)
                                                                        at android.os.Bundle.getParcelable(Bundle.java:755)
                                                                        at com.android.test.alarm.AlarmSettings.onCreate(AlarmSettings.java:19)
                                                                        at android.app.Activity.performCreate(Activity.java:6010)
                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413) 
                                                                        at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                        at android.os.Looper.loop(Looper.java:135) 
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5343) 
                                                                        at java.lang.reflect.Method.invoke(Native Method) 
                                                                        at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
java.lang.RuntimeException:无法启动活动组件信息{com.android.test.alarm/com.android.test.alarm.AlarmSettings}:java.lang.NullPointerException:尝试获取空数组的长度
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
在android.app.ActivityThread.access$800(ActivityThread.java:155)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5343)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:905)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
原因:java.lang.NullPointerException:尝试获取空数组的长度
位于android.os.Parcel.readBooleanArray(Parcel.java:807)
位于com.android.test.alarm.alarm(alarm.java:149)
位于com.android.test.alarm.alarm$1.createFromParcel(alarm.java:181)
在com.android.test.alarm.alarm$1.createFromParcel(alarm.java:178)上
位于android.os.Parcel.readParcelable(Parcel.java:2252)
位于android.os.Parcel.readValue(Parcel.java:2152)
在android.os.Parcel.ReadyArrayMapInternal(Parcel.java:2485)
位于android.os.BaseBundle.unparcel(BaseBundle.java:221)
位于android.os.Bundle.getParcelable(Bundle.java:755)
位于com.android.test.alarm.AlarmSettings.onCreate(AlarmSettings.java:19)
位于android.app.Activity.performCreate(Activity.java:6010)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
在android.app.ActivityThread.access$800(ActivityThread.java:155)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5343)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:905)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

是它
null
。看看你的

// your Alarm(Parcel in)
hours = in.readInt();
minutes = in.readInt();
alarmTime = in.readInt();
in.readBooleanArray(days);
// Your write function:
 dest.writeInt(hours);
dest.writeInt(minutes);
dest.writeInt(alarmTime);
dest.writeInt(ID);
dest.writeBooleanArray(days);

与上述函数一样,您将
布尔数组
写入第5个值,但将其读取为第4个值-->当然它是空的。因此,您应该更改写入位置或读取位置。

是它
null
。看看你的

// your Alarm(Parcel in)
hours = in.readInt();
minutes = in.readInt();
alarmTime = in.readInt();
in.readBooleanArray(days);
// Your write function:
 dest.writeInt(hours);
dest.writeInt(minutes);
dest.writeInt(alarmTime);
dest.writeInt(ID);
dest.writeBooleanArray(days);

与上述函数一样,您将
布尔数组
写入第5个值,但将其读取为第4个值-->当然它是空的。因此,您应该更改写入位置或读取位置。

我认为您尚未启动数组。将
this()
添加到第二个构造函数中

protected Alarm(Parcel in) {
    this();//add this to make sure arrays are initialised
    dest.writeInt(hours);
    dest.writeInt(minutes);

我想你还没有开始你的阵法。将
this()
添加到第二个构造函数中