Java I';我试图得到一个数组并抛出一个意图,但程序不断崩溃
我在做一个项目。我有两门课:课程,老师,学生。课程类中不包含任何数组,但讲师类包含课程类型的数组Java I';我试图得到一个数组并抛出一个意图,但程序不断崩溃,java,android,Java,Android,我在做一个项目。我有两门课:课程,老师,学生。课程类中不包含任何数组,但讲师类包含课程类型的数组 public class Instructor { static private int ID = 0; static private int nofi = 0; private String FName, title, LName; private Course[] c1; public Instructor(String t, String fn, String ln,
public class Instructor {
static private int ID = 0;
static private int nofi = 0;
private String FName, title, LName;
private Course[] c1;
public Instructor(String t, String fn, String ln, Course[] c1_1, int noc)
{
title = t;
FName = fn;
LName = ln;
//ID += 1;
nofi = 0;
c1 = new Course[noc];
c1 = c1_1.clone();
}
public String getFName()
{
return FName;
}
public String getLName()
{
return LName;
}
public String getTitle()
{
return title;
}
public int getID()
{
return ID;
}
public Course[] getC1()
{
return c1;
}
public int getNofi()
{
return ++nofi;
}
}
我试图使用getC1
方法,它是Course
类型的数组
我在主要活动中所做的是,我创建了一个讲师
类型的数组对象,并在列表中使用Intent Serializable将整个讲师数组发送到我的第二个活动
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position == 1)
{
intent.putExtra("instructor class", (Serializable)i);
startActivity(intent);
}
}
});
但是当我试着运行这个应用程序时,它马上就崩溃了
x[0].getC1();
它告诉我试图从空数组中读取
然而,我从我的代码中删除了所有的空值,这很好。我不知道如何解决这个问题,也不知道语法是否正确。如何返回数组
错误消息:
04-10 15:48:36.684 26089-26089/? I/art: Late-enabling -Xcheck:jni
04-10 15:48:36.816 26089-26089/com.example.saa0d.kuattend W/System: ClassLoader referenced unknown path: /data/app/com.example.saa0d.kuattend- 1/lib/arm64
04-10 15:48:36.873 26089-26089/com.example.saa0d.kuattend W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
04-10 15:48:36.957 26089-26089/com.example.saa0d.kuattend D/AndroidRuntime: Shutting down VM
04-10 15:48:36.958 26089-26089/com.example.saa0d.kuattend E/AndroidRuntime:
FATAL EXCEPTION: main
Process: com.example.saa0d.kuattend, PID: 26089
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.saa0d.kuattend/com.example.saa0d.kuattend.SecondActivity}: java.lang.NullPointerException: Attempt to read from null array
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 by: java.lang.NullPointerException: Attempt to read from null array
at com.example.saa0d.kuattend.SecondActivity.onCreate(SecondActivity.java:27)
at android.app.Activity.performCreate(Activity.java:6682)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)
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)
这是android studio中的错误消息:
实现可序列化
public class Instructor implements Serializable
{
}
您将讲师类对象传递给下一个活动,而不是讲师类数组
x = (Instructor[])intent2.getSerializableExtra("instructor class");
改为
x = (Instructor)intent2.getSerializableExtra("instructor class");
还有一件事,不用这样的空格就可以用钥匙
"instructor_class"
你应该让你的课程实现,然后使用意图;
Parcelable比Serializable快
另一种方法是继续使用Serializable并尝试将讲师[]替换为ArrayList,但我不确定这是否有帮助
谢谢你,伙计
x = (Instructor)intent2.getSerializableExtra("instructor class");
这是问题的一部分,它不应该是数组。
主要问题是,当我开始运行应用程序时,我的debugged设置为只运行第二个活动,而不运行主活动。因此没有传递任何内容,这就是它为空的原因。添加堆栈跟踪你的堆栈跟踪是什么意思?应用程序崩溃时出现的错误请阅读-总结是,这不是解决志愿者问题的理想方法,可能会对获得答案产生反作用。请不要把这个添加到你的问题中。我把它改成了那个,但我仍然遇到同样的问题。“尝试从空数组读取”我这样做了。我收到一条类型不兼容的消息。必需:com.example.saa0d.kuattend.讲师[]找到:com.example.saa0d.kuattend.InstructorContent.putExtra(“讲师类”,(可序列化)i);我到底是什么?我是讲师类型的变量。这是一个阵列有什么区别?我的老师告诉我要使用Serializable,因为它可以一次性传输所有内容。Serializable使用反射,速度要慢得多。尽管如此,您是否已尝试使课程类实现可序列化?请尝试将Bundle与ArrayList一起使用,如下所示:
x = (Instructor)intent2.getSerializableExtra("instructor class");