我遵循Android开发人员指南中的Parcelable示例,目的是让我发送到不同活动的更复杂的对象.现在,我的类是String成员的包装器.如果我将对象放在intent中并从Intent读取它,它会按预期读取,但是,在接收器端,它始终是空指针.
我的课:
package com.mobibob.androID.myapp;import androID.os.Parcel;import androID.os.Parcelable;public class ContentItem implements Parcelable { public String name = "name"; public static final String EXTRA_CONTENT_DETAIL = "contentDetail"; ContentItem(String n) { name = n; } ContentItem(Parcel in) { in.readParcelable(ContentItem.class.getClassLoader()); <--- NEW CODE name = in.readString(); } @OverrIDe public String toString() { return name.toString(); } @OverrIDe public int describeContents() { return 0; } @OverrIDe public voID writetoParcel(Parcel dest, int flags) { dest.writeString(name); } public final Parcelable.Creator<ContentItem> CREATOR = new Parcelable.Creator<ContentItem>() { public ContentItem createFromParcel(Parcel in) { return new ContentItem(in); } public ContentItem[] newArray(int size) { return new ContentItem[size]; } };}
我的intent / read-back / startActivity设置:
ContentItem ci = new ContentItem("mobibob");// Launch ...Intent i = new Intent(getApplicationContext(), ContentDetailActivity.class);i.putExtra(ContentItem.EXTRA_CONTENT_DETAIL, ci);ContentItem readbackCi = i.getParcelableExtra(ContentItem.EXTRA_CONTENT_DETAIL);Log.d(TAG, "\n\n\t" + readbackCi.name);startActivity(i);
我的接收活动:
package com.mobibob.androID.myapp;import androID.app.Activity;import androID.content.Intent;import androID.os.Bundle;import androID.util.Log;import androID.Widget.TextVIEw;public class ContentDetailActivity extends Activity { public static final String TAG = "ContentDetailActivity"; @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.content_detail); try { Intent i = getIntent(); Log.d(TAG, "intent: " + i.toString()); Log.d(TAG, "extras: " + i.getExtras()); ContentItem ci = (ContentItem) i.getParcelableExtra(ContentItem.EXTRA_CONTENT_DETAIL); Log.d(TAG, "content-item: " + ci.toString()); ((TextVIEw) findVIEwByID(R.ID.name_of_content)).setText(ci.name); } catch (Exception e) { Log.d(TAG, e.toString()); } }}
我的日志:
08-16 15:03:40.121 I/HomeActivity( 9840): onItemClick - AdapterVIEw (pos=1 ID=1)08-16 15:03:40.121 D/HomeActivity( 9840): 08-16 15:03:40.121 D/HomeActivity( 9840): 08-16 15:03:40.121 D/HomeActivity( 9840): Rock/Pop08-16 15:03:40.131 I/ActivityManager( 1186): Starting activity: Intent { cmp=com.mobibob.androID.myapp/.ContentDetailActivity (has extras) }08-16 15:03:40.341 D/ContentDetailActivity( 9840): intent: Intent { cmp=com.mobibob.androID.myapp/.ContentDetailActivity (has extras) }08-16 15:03:40.341 D/ContentDetailActivity( 9840): extras: Bundle[mParcelledData.dataSize=148]08-16 15:03:40.351 D/ContentDetailActivity( 9840): java.lang.NullPointerException08-16 15:03:40.653 I/ActivityManager( 1186): displayed activity com.mobibob.androID.myapp/.ContentDetailActivity: 336 ms (total 336 ms)
我的堆栈回溯:
08-16 17:19:52.170 I/HomeActivity( 3147): onItemClick - AdapterVIEw (pos=3 ID=3)08-16 17:19:52.170 D/HomeActivity( 3147): 08-16 17:19:52.170 D/HomeActivity( 3147): 08-16 17:19:52.170 D/HomeActivity( 3147): mobibob08-16 17:19:52.170 I/ActivityManager( 1202): Starting activity: Intent { cmp=com.mobibob.androID.myapp/.ContentDetailActivity (has extras) }08-16 17:19:52.410 D/ContentDetailActivity( 3147): intent: Intent { cmp=com.mobibob.androID.myapp/.ContentDetailActivity (has extras) }08-16 17:19:52.410 D/ContentDetailActivity( 3147): extras: Bundle[mParcelledData.dataSize=144]08-16 17:19:52.410 D/ContentDetailActivity( 3147): java.lang.NullPointerException08-16 17:19:52.410 W/System.err( 3147): java.lang.NullPointerException08-16 17:19:52.420 W/System.err( 3147): at java.lang.reflect.FIEld.getFIEld(Native Method)08-16 17:19:52.420 W/System.err( 3147): at java.lang.reflect.FIEld.get(FIEld.java:247)08-16 17:19:52.420 W/System.err( 3147): at androID.os.Parcel.readParcelable(Parcel.java:1811)08-16 17:19:52.420 W/System.err( 3147): at androID.os.Parcel.readValue(Parcel.java:1713)08-16 17:19:52.420 W/System.err( 3147): at androID.os.Parcel.readMAPInternal(Parcel.java:1947)08-16 17:19:52.420 W/System.err( 3147): at androID.os.Bundle.unparcel(Bundle.java:169)08-16 17:19:52.420 W/System.err( 3147): at androID.os.Bundle.getParcelable(Bundle.java:1037)08-16 17:19:52.430 W/System.err( 3147): at androID.content.Intent.getParcelableExtra(Intent.java:3276)08-16 17:19:52.430 W/System.err( 3147): at com.mobibob.androID.myapp.ContentDetailActivity.onCreate(ContentDetailActivity.java:24)08-16 17:19:52.430 W/System.err( 3147): at androID.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)08-16 17:19:52.430 W/System.err( 3147): at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2459)08-16 17:19:52.430 W/System.err( 3147): at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)08-16 17:19:52.430 W/System.err( 3147): at androID.app.ActivityThread.access00(ActivityThread.java:119)08-16 17:19:52.430 W/System.err( 3147): at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)08-16 17:19:52.430 W/System.err( 3147): at androID.os.Handler.dispatchMessage(Handler.java:99)08-16 17:19:52.430 W/System.err( 3147): at androID.os.Looper.loop(Looper.java:123)08-16 17:19:52.430 W/System.err( 3147): at androID.app.ActivityThread.main(ActivityThread.java:4363)08-16 17:19:52.430 W/System.err( 3147): at java.lang.reflect.Method.invokeNative(Native Method)08-16 17:19:52.430 W/System.err( 3147): at java.lang.reflect.Method.invoke(Method.java:521)08-16 17:19:52.430 W/System.err( 3147): at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)08-16 17:19:52.430 W/System.err( 3147): at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:626)08-16 17:19:52.440 W/System.err( 3147): at dalvik.system.NativeStart.main(Native Method)08-16 17:19:52.895 I/ActivityManager( 1202): displayed activity com.mobibob.androID.myapp/.ContentDetailActivity: 582 ms (total 582 ms)
解决方法:
我猜是in.readParcelable(ContentItem.class.getClassLoader());返回已重新创建的ContentItem.因此,您应该将该行放入Parcelable.Creator中的createFromParcel-Method中.
只是一个猜测.
以上是内存溢出为你收集整理的android – 为什么parcelable对象在接收活动时为null?全部内容,希望文章能够帮你解决android – 为什么parcelable对象在接收活动时为null?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)