2013-11-21 6 views
0

이 사이트 (및 기타)에서 많은 질문을 읽었으므로 코드에 대한 해결책을 찾을 수 없으므로 다음 단계는 여기에 게시하는 것입니다. . 나는 미로 게임을 만들고있다. 나는 생성 액티비티와 플레이 액티비티를 가지고 있으며, 생성 된 Maze 객체를 PlayActivity에 전달하려고합니다. 미로는 직렬화 가능하지만 PlayActivity에서 미로를 얻으려고하면 null 포인터 예외가 반환됩니다. 어떤 생각이라도 훌륭합니다.null 포인터 의도를 통해 새 활동에 객체를 전달할 때

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을 사용하는 것이 좋습니다 알고,하지만 내 미로 클래스는 '아무튼 너무 많은 데이터 필드가 그럴만 한 가치가있는 것 같습니다 (누군가 다른 이유가 없다면).

편집 : 여기에 로그가있다 :

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 
+0

여기에 로그캣 오류가 게시됩니다. –

+0

maze.mazecells가 null이 아닌지 확인 했습니까? – Tyler

+0

스택 추적을 게시하십시오. – Kishore

답변

0

System.out.print (maze.toString()) 널 안, 확인이

+0

당신은 맞습니다, 미로는 널이 아니며, 그것은 특별히 mazecell입니다. 하지만 그것은 GeneratingActivity에서 설정되었으므로 그 필드가 전송되지 않는 이유에 대해 혼란 스럽습니다. – Jesavino

0

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"); 
+0

나는 번들을 이미 지쳤으므로 그다지 변하지 않는 것 같습니다. – Jesavino

0

t 귀하의 Maze 클래스에서 Parcelable을 구현하십시오.

안드로이드는 Serializable을 잘 지원하지 않으므로 안드로이드 컨텍스트간에 데이터를 보내려고 할 때 먼저 Parcelable을 사용해야합니다.

+0

'Serializeable'은 지원되지만'Parcelable'보다 느립니다. – Geros

+0

Parcelable이 미로에 추가해야 할 속성의 수 때문에 더 많은 작업을 수행 할 것으로 보이기 때문에 더 느립니다. – Jesavino

관련 문제