繁体   English   中英

通过意图将对象传递给新活动时为空指针

[英]Null Pointer When Passing object to new activity through intent

因此,我已经阅读了本网站(和其他网站)上的许多问题,并且找不到适合我的代码的有效解决方案,因此我认为下一步是将其发布在此处。 我正在做一个迷宫游戏。 我有一个生成活动和一个游戏活动,我试图将生成的Maze对象传递给PlayActivity。 迷宫是可序列化的,但是当我尝试从PlayActivity的意图中获取迷宫时,它会返回空指针异常。 任何想法都会很棒。

Maze:
public class Maze implements Serializable {

private static final long serialVersionUID = 1L;

然后GeneratingActivity:

Intent playIntent = new Intent(this , PlayActivity.class);
playIntent.putExtra("MadeMaze" , maze);
startActivity(playIntent);

最后是PlayActivity:

maze = (Maze) getIntent().getSerializableExtra("MadeMaze");
System.out.print(maze.mazecells.toString());
System.out.print("here");

我知道有人可能会建议使用Parcelable,但是我的Maze类具有如此多的数据字段,似乎并不值得(除非有人有充分的理由否则)。

编辑:这是日志:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity        ComponentInfo{edu.wm.cs.cs301.jesavino/edu.wm.cs.cs301.jesavino.UI.PlayActivity}: java.lang.NullPointerException

11-20 21:46:37.614: E/AndroidRuntime(1940):     at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at     android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at android.os.Looper.loop(Looper.java:137)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at android.app.ActivityThread.main(ActivityThread.java:5103)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at java.lang.reflect.Method.invokeNative(Native Method)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at java.lang.reflect.Method.invoke(Method.java:525)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at dalvik.system.NativeStart.main(Native Method)
11-20 21:46:37.614: E/AndroidRuntime(1940): Caused by: java.lang.NullPointerException
11-20 21:46:37.614: E/AndroidRuntime(1940):     at edu.wm.cs.cs301.jesavino.UI.PlayActivity.onCreate(PlayActivity.java:36)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at android.app.Activity.performCreate(Activity.java:5133)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-20 21:46:37.614: E/AndroidRuntime(1940):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
11-20 21:46:37.614: E/AndroidRuntime(1940):     ... 11 more

System.out.print(maze.toString())不应为null,请检查它

请尝试使用捆绑

Intent playIntent = new Intent(this , PlayActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("MadeMaze", maze);
playIntent.putExtras(bundle);
startActivity(playIntent);

在PlayActivity中

 maze = (Maze) getIntent().getExtra().getSerializable("MadeMaze");

尝试在您的Maze类中实现Parcelable。

Android并不能很好地支持Serializable,因此当您尝试在android上下文之间发送数据时,应该首先使用Parcelable。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM