【问题标题】:getExtras method retrieves a null object when I passed it correctly当我正确传递它时,getExtras 方法检索一个空对象
【发布时间】:2011-06-09 03:20:09
【问题描述】:

我在两个活动之间传递了一些数据,但是我得到了一个 NullPointerException 我不应该...

我这样开始活动

Intent i= new Intent(getApplicationContext(),
     NewActivity.class);

i.putExtra(SERVICE_ID, serviceId);
i(serviceActivityIntent);

我尝试以这种方式获取另一端的 serviceId

    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

/* I also tried this just for in case my object was in the savedInstanceState */    
//      mServiceId = (savedInstanceState == null) ? null
//        : (GroupServiceId) savedInstanceState
//          .getSerializable(ServicesActivity.SERVICE_ID);

      if (mServiceId == null) {
       Bundle extras = getIntent().getExtras();
       mServiceId = extras != null ? (GroupServiceId) extras
         .getSerializable(ServicesActivity.SERVICE_ID) : null;    // <-- this is line 86
      }

我想我做的一切都还好,但这里的线索已经不多了... 这是我得到的例外:

01-14 13:11:57.735: ERROR/AndroidRuntime(1019): FATAL EXCEPTION: main
01-14 13:11:57.735: ERROR/AndroidRuntime(1019): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.pfc/org.pfc.NewActivity}: java.lang.NullPointerException
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.app.ActivityThread.access$2300(ActivityThread.java:135)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.os.Looper.loop(Looper.java:144)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.app.ActivityThread.main(ActivityThread.java:4937)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.lang.reflect.Method.invokeNative(Native Method)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.lang.reflect.Method.invoke(Method.java:521)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at dalvik.system.NativeStart.main(Native Method)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019): Caused by: java.lang.NullPointerException
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at org.smepp.datatypes.smm.GroupServiceId.readObject(GroupServiceId.java:105)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.lang.reflect.Method.invokeNative(Native Method)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.lang.reflect.Method.invoke(Method.java:521)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1537)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1460)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2139)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:929)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2285)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2240)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.os.Parcel.readSerializable(Parcel.java:1945)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.os.Parcel.readValue(Parcel.java:1822)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.os.Parcel.readMapInternal(Parcel.java:2008)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.os.Bundle.unparcel(Bundle.java:208)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.os.Bundle.getSerializable(Bundle.java:1189)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at org.pfc.NewActivity.onCreate(NewActivity.java:86)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
01-14 13:11:57.735: ERROR/AndroidRuntime(1019):     ... 11 more

显然,当第二个活动开始时,意图中的“额外”对象为空,但我一直想知道为什么......

顺便说一下,GroupServiceId 实现了 Serializable 所以这不是问题,或者我认为是这样......

谢谢

【问题讨论】:

    标签: android android-intent bundle


    【解决方案1】:

    您的附加包不是null,而是GroupServiceId.readObject() 崩溃了。你的序列化被搞砸了。建议您发布GroupServiceId 的代码。

    【讨论】:

    • 没错,序列化发生了一些事情......该类在 Java SE 中是完全可序列化的,但由于某种原因在 Android 中不是。我逐个字段序列化类字段并工作。谢谢:-)
    【解决方案2】:

    我认为您需要使用 extras.putSerializable() 方法添加您的对象,然后您可以在取回它时强制转换它。这是上一个问题的链接link

    【讨论】:

      猜你喜欢
      • 2018-05-02
      • 1970-01-01
      • 2017-02-17
      • 2012-04-19
      • 2019-03-12
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 2016-04-19
      相关资源
      最近更新 更多