我正在尝试获取一个数组并投射一个意图,但程序一直在崩溃

时间:2017-04-10 11:43:24

标签: java android

我正在做一个项目。我有几个课程:课程,讲师,学生。 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中的错误消息:

This is the error message in the android studio

3 个答案:

答案 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。所以没有传递任何东西,因为它为空。