我正在将一个对象从活动传递给另一个。然后从那个活动到另一个活动。 当我尝试从第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
答案 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。