android– 为什么parcelable对象在接收活动时为null?

android– 为什么parcelable对象在接收活动时为null?,第1张

概述我遵循Android开发人员指南中的Parcelable示例,目的是让我发送到不同活动的更复杂的对象.现在,我的类是String成员的包装器.如果我将对象放在intent中并从Intent读取它,它会按预期读取,但是,在接收器端,它始终是空指针.我的课:packagecom.mobibob.android.myapp;importandroi

我遵循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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1113918.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存