Android-通过ArrayList时应用崩溃 - java

我通过单击按钮将类型为ArrayList的主题传递给另一个活动。但是此后该应用程序崩溃了。

这是我的第一个活动的摘录。 ComputeGrades是按下按钮时要调用的方法。我没有为显示主题的动态表添加代码。

public class ACMActivity2A extends Activity {

    ArrayList<Subject> subjectList;

    public class Subject implements Serializable {
        public Subject(){}

        private static final long serialVersionUID = 1L;
        private String courseName;
        private String unit;

        public void setCourseName(String cName){
            this.courseName = cName;
        }    

        public void setUnit(String unit){
            this.unit = unit;
        }

        public String getCourseName(){
            return courseName;
        }

        public String getUnit(){
            return unit;
        }
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        subjectList= new ArrayList<Subject>();
    }

    public void computeGrades(View view){
          Intent intent = new Intent(ACMActivity2A.this, JLCSActivity2B.class);
          Bundle bundle = new Bundle();
          bundle.putSerializable("subjectList", subjectList);
          intent.putExtras(bundle);
          startActivity(intent);
        //Intent.putExtra(SUBJECT_LIST, subjectList);

        //Context ct = getApplicationContext();
        // String text = "working....";
        // int duration = Toast.LENGTH_SHORT;    
        // Toast toast = Toast.makeText(this, text, duration);
        // toast.show();
    }
}

这是第二个活动

    public class JLCSActivity2B extends Activity
    {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main2);

            Intent intent = this.getIntent();
            Bundle bundle = intent.getExtras();
            ArrayList<Subject> subjectList = (ArrayList<Subject>)bundle.getSerializable("subjectList");
 }
}

这是日志错误:

08-21 12:19:54.688  12490-12490/com.example.activity2a E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.activity2a, PID: 12490
    java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3846)
            at android.view.View.performClick(View.java:4478)
            at android.view.View$PerformClick.run(View.java:18698)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:149)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3841)
            at android.view.View.performClick(View.java:4478)
            at android.view.View$PerformClick.run(View.java:18698)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:149)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.example.activity2a.ACMActivity2A$Subject)
            at android.os.Parcel.writeSerializable(Parcel.java:1323)
            at android.os.Parcel.writeValue(Parcel.java:1271)
            at android.os.Parcel.writeList(Parcel.java:660)
            at android.os.Parcel.writeValue(Parcel.java:1233)
            at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
            at android.os.Bundle.writeToParcel(Bundle.java:1692)
            at android.os.Parcel.writeBundle(Parcel.java:643)
            at android.content.Intent.writeToParcel(Intent.java:7152)
            at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2663)
            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1419)
            at android.app.Activity.startActivityForResult(Activity.java:3532)
            at android.app.Activity.startActivityForResult(Activity.java:3458)
            at android.app.Activity.startActivity(Activity.java:3780)
            at android.app.Activity.startActivity(Activity.java:3748)
            at com.example.activity2a.ACMActivity2A.computeGrades(ACMActivity2A.java:74)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3841)
            at android.view.View.performClick(View.java:4478)
            at android.view.View$PerformClick.run(View.java:18698)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:149)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.io.NotSerializableException: com.example.activity2a.ACMActivity2A
            at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1366)
            at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1673)
            at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1519)
            at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1483)
            at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:981)
            at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
            at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1076)
            at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1406)
            at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1673)
            at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1519)
            at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1483)
            at android.os.Parcel.writeSerializable(Parcel.java:1318)
            at android.os.Parcel.writeValue(Parcel.java:1271)
            at android.os.Parcel.writeList(Parcel.java:660)
            at android.os.Parcel.writeValue(Parcel.java:1233)
            at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
            at android.os.Bundle.writeToParcel(Bundle.java:1692)
            at android.os.Parcel.writeBundle(Parcel.java:643)
            at android.content.Intent.writeToParcel(Intent.java:7152)
            at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2663)
            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1419)
            at android.app.Activity.startActivityForResult(Activity.java:3532)
            at android.app.Activity.startActivityForResult(Activity.java:3458)
            at android.app.Activity.startActivity(Activity.java:3780)
            at android.app.Activity.startActivity(Activity.java:3748)
            at com.example.activity2a.ACMActivity2A.computeGrades(ACMActivity2A.java:74)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3841)
            at android.view.View.performClick(View.java:4478)
            at android.view.View$PerformClick.run(View.java:18698)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:149)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
            at dalvik.system.NativeStart.main(Native Method)

参考方案

您错误地传递了可序列化的数据

在这里,您应该如何通过意图传递可序列化的数据:

Bundle bundle = new Bundle();  
bundle.putSerializable("subject", subjectList);
intent.putExtras(bundle);

并在SecondClass Activity中将其获取为:

Intent intent=this.getIntent();
Bundle bundle=intent.getExtras();

List<Subject> subjects = (List<Subject>)bundle.getSerializable("subject");

您的主题类也缺少可序列化的ID

private static final long serialVersionUID = 1L;

单击后退按钮时,滑行加载的图像会重置 - java

我正在滑行加载图像。但是问题是,当我们按下后退按钮时,从视图中清除加载的图像。无论我在活动图像视图中还是在recyclerview中加载图像,我都面临着这个问题。我正在加载图像GlideApp.with(this) .load(url) .into(mToolbarAvatar); 参考方案 在代码中添加两行.skipMemoryCache(true) .d…

Android Firebase:将数据保存到数据库 - java

我正在尝试从Firebase保存和检索数据,但是在获取正确的语法时遇到了一些麻烦。用户通过电子邮件和密码的身份验证方法进行注册,并使用相同的详细信息登录。我有两个编辑文本字段,要求输入名称和语句。在两个编辑文本框下面有一个按钮,用于将数据保存到数据库。private void saveQuote(){ String name = author.getText…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

Java:从类中查找项目名称 - java

仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…