尝试访问从android中的另一个活动传递的对象的属性时出现空指针异常

时间:2012-02-13 16:46:48

标签: android android-activity

我正在将一个对象从活动传递给另一个。然后从那个活动到另一个活动。 当我尝试从第3个活动访问传递对象的属性时,我得到一个空指针异常。

我也设置了属性。所以我不明白它的原因。

第一项活动的代码:

private Task t;

public void onClick(View v) {

    if(v == this.btnAdd){
        this.addItem(this.txtTask.getText().toString());
        this.addTask(this.txtTask.getText().toString());
    }

}

private void addTask(String taskName){
    if(taskName.length()>0){
        t = new Task(taskName);

        this.tasks.add(t);
    }
}

 public void onItemClick(AdapterView<?> parent, View view, int position,
                long id3) {


        Intent myIntent = new Intent(getApplicationContext(), TabSwitch.class);
        myIntent.putExtra("taskItem", t);
            startActivity(myIntent);
        }

    });

从第二项活动开始:

private TextView selectedTask;

Intent i=getIntent();

    Task taskItem = (Task) i.getSerializableExtra("taskItem");


    i = new Intent().setClass(this, Info.class);
    i.putExtra("taskItem", taskItem);

来自第3项活动:

Intent i=getIntent();
Task task =(Task) i.getSerializableExtra("taskItem");

selectedTask.setText(task.getTaskName());

这是日志:

02-13 22:03:02.868: E/AndroidRuntime(572): FATAL EXCEPTION: main
02-13 22:03:02.868: E/AndroidRuntime(572): java.lang.RuntimeException: Unable to start activity ComponentInfo{sam.todo.OnTime/sam.todo.OnTime.TabSwitch}: java.lang.RuntimeException: Unable to start activity ComponentInfo{sam.todo.OnTime/sam.todo.OnTime.Info}: java.lang.NullPointerException
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.os.Looper.loop(Looper.java:123)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.main(ActivityThread.java:3683)
02-13 22:03:02.868: E/AndroidRuntime(572):  at java.lang.reflect.Method.invokeNative(Native Method)
02-13 22:03:02.868: E/AndroidRuntime(572):  at java.lang.reflect.Method.invoke(Method.java:507)
02-13 22:03:02.868: E/AndroidRuntime(572):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-13 22:03:02.868: E/AndroidRuntime(572):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-13 22:03:02.868: E/AndroidRuntime(572):  at dalvik.system.NativeStart.main(Native Method)
02-13 22:03:02.868: E/AndroidRuntime(572): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{sam.todo.OnTime/sam.todo.OnTime.Info}: java.lang.NullPointerException
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:1487)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:654)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.widget.TabHost.setCurrentTab(TabHost.java:326)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.widget.TabHost.addTab(TabHost.java:216)
02-13 22:03:02.868: E/AndroidRuntime(572):  at sam.todo.OnTime.TabSwitch.onCreate(TabSwitch.java:30)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-13 22:03:02.868: E/AndroidRuntime(572):  ... 11 more
02-13 22:03:02.868: E/AndroidRuntime(572): Caused by: java.lang.NullPointerException
02-13 22:03:02.868: E/AndroidRuntime(572):  at sam.todo.OnTime.Info.onCreate(Info.java:34)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-13 22:03:02.868: E/AndroidRuntime(572):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
02-13 22:03:02.868: E/AndroidRuntime(572):  ... 20 more

3 个答案:

答案 0 :(得分:0)

是否抛出空指针异常,因为对象t为空?!看起来那样。确保您在某处创建t

答案 1 :(得分:0)

如果所有这些活动都在同一个Application下,我建议您只使用自己的自定义应用程序类扩展Application类,该类存储在整个应用程序中持久化的对象(除非它被中断然后关闭,阅读Arhimed在下面的评论)。这是一个更加强大的解决方案,因为它对活动生命周期具有弹性。

这是一个有助于实现此目的的链接: https://stackoverflow.com/a/708317/220710

答案 2 :(得分:0)

您的活动是否正确维护其生命周期?看起来不是。如果你离开,比如说,活动A支持活动B(所以活动堆栈是A> B),那么一旦活动A变得不可见,操作系统就可以决定杀死它(有黑客可以阻止它,但那些是黑客,所以你最好避免它们)。因此,当您从B回到活动A时,操作系统将为您恢复活动A(但是您负责正确的活动状态维护 - 活动API具有特殊的回调 - 持久/恢复你在那些点上的任务)。以下是关于此的官方教程:Managing the Activity Lifecycle