将ParcelableArrayList和LongArray传递给新活动

时间:2012-02-08 19:11:34

标签: android android-intent

我有ArrayList LocaitonArray long我试图传递给新活动,然后将其写入文件。

Bundle b = new Bundle();
Intent i = new Intent(Begin_Run.this, GPSTrackDetails.class);
Times = convertLong(times);
b.putParcelableArrayList("Locations", locations);
b.putLongArray("Times", Times);
i.putExtra("bundle", b);
startActivity(i);

这是我使用捆绑包将它们添加到Intent的方式。但是当我尝试在新活动中打印出来时,我得到一个空指针异常。

这就是我在新活动中将其从Bundle中删除的方式。

Bundle bundle = getIntent().getExtras();
locations = bundle.getParcelableArrayList("Locations");
times = bundle.getLongArray("Times");

LogCat输出

 FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fyp.run_race/com.fyp.run_race.GPSTrackDetails}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.fyp.run_race.GPSTrackDetails.onCreate(GPSTrackDetails.java:37)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
... 11 more

1 个答案:

答案 0 :(得分:1)

您没有正确传递信息。 Intent 中的扩展数据(“额外”)是一个包。你正在做的是将你的捆绑放在密码“捆绑”下的内。

如果你真的想传递像你在第一个代码片段中那样的信息,你需要通过

来解决它。
Bundle bundle = getIntent().getExtras().getParcelable( "bundle" );

但是,您可能只想将其直接放入额外内容中,使用类似

的内容
Intent i = new Intent(Begin_Run.this, GPSTrackDetails.class);  
Times = convertLong(times);  
i.putParcelableArrayListExtra("Locations", locations);  
i.putExtra("Times", Times);  
startActivity(i);