【问题标题】:Sending an object through Serializable crashes通过 Serializable 崩溃发送对象
【发布时间】:2013-12-30 13:35:49
【问题描述】:

我在第二个活动中的 onCreate() 中调用了以下方法。

它通过Serializable从第一个活动中获取一个对象,并基于它创建一个列表,更改对象并将其发送回第一个活动。

这很好用,但是如果我将 unchanged 对象发送回第一个活动,它会在尝试在第二个活动中创建列表时崩溃。

private void createLectureListView() {

    ListView lecListView = (ListView) findViewById(R.id.lectureListView);

    Intent i = getIntent();
    mod = (Module)i.getSerializableExtra("moduleObject");

    lectureList = new ArrayList<Lecture>();

    if (mod.lectureArrayList!=null) lectureList=mod.lectureArrayList;

    listAdapter = new ArrayAdapter<Lecture>(this,android.R.layout.simple_list_item_1, lectureList);

    lecListView.setAdapter(listAdapter);
}

这是个例外:

Caused by: java.lang.NullPointerException

[编辑] 还添加了其他位。这是 Activity1 中的那个:

private void registerClickCallback() {
    ListView listView1 = (ListView) findViewById(R.id.listView1);
    listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent myIntent = new Intent(MenuActivity.this, LectureNotes.class);
            //pass the module object we are selecting
            myIntent.putExtra("moduleObject",modulesInfo.get(position));
            pos = position;

            startActivityForResult(myIntent,1);
        }
    });
}

第一个活动中的onActivityResult方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if(resultCode == RESULT_OK){
            mod = (Module)data.getSerializableExtra("moduleObject");
            if (mod!=modulesInfo.get(pos))
                modulesInfo.set(pos,mod);
        }
    }
}

[EDIT2] 堆栈跟踪

12-12 08:56:37.041    4143-4143/com.example.learnorizeapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.learnorizeapp/com.example.learnorizeapp.LectureNotes}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.learnorizeapp.LectureNotes.createLectureListView(LectureNotes.java:59)
            at com.example.learnorizeapp.LectureNotes.onCreate(LectureNotes.java:28)
            at android.app.Activity.performCreate(Activity.java:5104)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
12-12 08:56:37.057      459-709/system_process W/ActivityManager﹕ Force finishing activity com.example.learnorizeapp/.LectureNotes
12-12 08:56:37.057      459-709/system_process W/ActivityManager﹕ Force finishing activity com.example.learnorizeapp/.MenuActivity

【问题讨论】:

  • "crashes" 表明您的日志中可能存在异常 - 所以找到它,看看是否能解释它。如果您仍然不知道出了什么问题,请编辑问题以包含异常。
  • 您的描述中缺少一些内容:Act1 通过 Intent 将对象发送到 Act2,然后 Act2 将未更改的对象发送回 Act1,并且“尝试在第二个活动中创建列表时崩溃”。不过此时,您应该回到 Act1。请澄清哪些活动崩溃以及在哪里崩溃,以及如何调用它们:是通过 startActivity() 还是 startActivityForResult()?
  • @Melquiades 当我再次单击 Act1 列表视图中的项目以再次打开 ACt2 时,它会停止。我认为这是因为它无法再次在第 2 幕中创建列表视图。使用 startActivityForResult(),我复制了问题中的代码。
  • @JonSkeet 发现异常原因:java.lang.NullPointerException
  • 这很漂亮:代表最低的用户得到了最高代表的用户的帮助。这就是我喜欢 stackoverflow 的原因。

标签: java android object arraylist serializable


【解决方案1】:

lectureList 存在问题,在执行某些不同场景(例如单击一个按钮但未单击另一个按钮)时返回 null。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多