我正在做一个项目。我有几个课程:课程,讲师,学生。 Course类中不包含任何数组,但Instructor类包含Course
类型的数组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
类型的数组。
我在我的主要活动中做的是我创建了一个类型为Instructor
的数组对象,并且我在列表中使用了Intent Serializable来将整个Instructor数组发送到我的第二个活动
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);
}
}
});
在我的SecondActivity中,我以这种方式接收它:
Intent intent2 = getIntent();
Instructor x[];
x = (Instructor[])intent2.getSerializableExtra("instructor class");
x[0].getC1();
但是当我尝试运行该应用时,它会立即崩溃
x[0].getC1();
它告诉我Attempt to read from a null array
。
但是我从代码中删除了所有空值并且没有问题。我不知道如何解决这个问题,或者语法是对还是错。我怎样才能返回数组?
错误消息:
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中的错误消息:
答案 0 :(得分:0)
实现可序列化
public class Instructor implements Serializable
{
}
将Instructor类对象传递给下一个activity而不是Instructor类的数组
x = (Instructor[])intent2.getSerializableExtra("instructor class");
更改为
x = (Instructor)intent2.getSerializableExtra("instructor class");
还有一件事没有像这样的空间使用密钥
"instructor_class"
答案 1 :(得分:0)
你应该让你的类实现Parcelable,之后使用intent.putParcelableArray(&#34;讲师类&#34;,i); Parcelable比Serializable
更快另一种方法是继续使用Serializable并尝试将Instructor []替换为ArrayList,但我不确定这会有所帮助
答案 2 :(得分:0)
@Hitesh Gehlot 谢谢你的男人
x = (Instructor)intent2.getSerializableExtra("instructor class");
这是问题的一部分,它不应该是一个数组。 主要的问题是,当我来运行应用程序时,我的调试设置为仅在没有主应用程序的情况下运行SecondActivity。所以没有传递任何东西,因为它为空。