GVKun编程网logo

java-getSerializableExtra返回null(java返回null的问题)

11

本文的目的是介绍java-getSerializableExtra返回null的详细情况,特别关注java返回null的问题的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面

本文的目的是介绍java-getSerializableExtra返回null的详细情况,特别关注java返回null的问题的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解java-getSerializableExtra返回null的机会,同时也不会遗漏关于android java.io.NotSerializableException、android – getIntent().getStringExtra()返回null、android-编写Parcelable对象获取java.io.NotSerializableException、Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload ...的知识。

本文目录一览:

java-getSerializableExtra返回null(java返回null的问题)

java-getSerializableExtra返回null(java返回null的问题)

我的例子:

public static final String EXTRA_TARGET_FRAGMENT = "fragment_to_show";

    public static void show(Activity pActivity,
            Class<? extends Fragment> fragment) {
        Intent intent = new Intent(pActivity, HomeActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.putExtra(EXTRA_TARGET_FRAGMENT, fragment);
        pActivity.startActivity(intent);
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        mUpcomingTarget = (Class<Fragment>) intent
                .getSerializableExtra(EXTRA_TARGET_FRAGMENT);

}

mUpcomingTarget-> null,我无法理解问题所在.

解决方法:

putExtra(String, Serializable)文档说

The name must include a package prefix, for example the app com.android.contacts would use names like “com.android.contacts.ShowAll”.

将您的EXTRA_TARGET_FRAGMENT更改为以包前缀开头.

android java.io.NotSerializableException

android java.io.NotSerializableException

/ CRASH: co.zuren.rent (pid 8857)

// Short Msg: java.io.NotSerializableException

// Long Msg: java.io.NotSerializableException: android.widget.FrameLayout

// Build Label: Xiaomi/2014011/HM2014011:4.2.2/HM2014011/JHFCNBL27.0:user/release-keys

// Build Changelist: JHFCNBL27.0

// Build Time: 1422850989000

// java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = co.zuren.rent.controller.activity.PublishDateSecondActivity$1)

// at android.os.Parcel.writeSerializable(Parcel.java:1279)

// at android.os.Parcel.writeValue(Parcel.java:1233)

// at android.os.Parcel.writeMapInternal(Parcel.java:591)

// at android.os.Bundle.writeToParcel(Bundle.java:1627)

// at android.os.Parcel.writeBundle(Parcel.java:605)

// at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:132)

// at android.os.Parcel.writeTypedArray(Parcel.java:1102)

// at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:374)

// at android.os.Parcel.writeParcelable(Parcel.java:1254)

// at android.os.Parcel.writeValue(Parcel.java:1173)

// at android.os.Parcel.writeMapInternal(Parcel.java:591)

// at android.os.Bundle.writeToParcel(Bundle.java:1627)

// at android.os.Parcel.writeBundle(Parcel.java:605)

// at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2308)

// at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3303)

// at android.os.Handler.handleCallback(Handler.java:800)

// at android.os.Handler.dispatchMessage(Handler.java:100)

// at android.os.Looper.loop(Looper.java:194)

// at android.app.ActivityThread.main(ActivityThread.java:5433)

// at java.lang.reflect.Method.invokeNative(Native Method)

// at java.lang.reflect.Method.invoke(Method.java:525)

// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:853)

// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

// at dalvik.system.NativeStart.main(Native Method)

// Caused by: java.io.NotSerializableException: android.widget.FrameLayout

// at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)

// at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)

// at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)

// at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)

// at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)

// at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)

// at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)

// at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)

// at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)

// at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)

// at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)

// at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)

// at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)

// at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)

// at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)

// at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)

// at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)

// at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)

// at android.os.Parcel.writeSerializable(Parcel.java:1274)





PublishDateSecondActivity.java 已经序列化过了,他说FrameLayout是怎么回事?

android – getIntent().getStringExtra()返回null

android – getIntent().getStringExtra()返回null

我在我的应用程序中实现了onPause()和onResume()方法,如下所示:

protected void onPause() {
        super.onPause();

        String receiver = phoneNoField.getText().toString();
        String message = messageBody.getText().toString();
        getIntent().putExtra(MESSAGE_RECEIVER,receiver);
        getIntent().putExtra(MESSAGE_BODY,message);

        Log.d(TAG,receiver + " " + message);       
    }


protected void onResume() {
        super.onResume();

        String receiver = getIntent().getStringExtra(MESSAGE_RECEIVER);
        String message = getIntent().getStringExtra(MESSAGE_BODY);
        if(receiver != null)
            phoneNoField.setText(receiver);
        if(message != null)
            messageBody.setText(message);

        Log.d(TAG,receiver + " " + message);       
    }

当调用onPause()方法时,我看到已经设置了值.但是在我的onResume()方法中,getStringExtra()始终返回null.我的做法有什么问题吗?

解决方法

getIntent()返回已启动活动的Intent.当你去另一个活动然后回来时,getIntent()返回的内容与你在onPause方法中的内容不同

您可以选择将值放在用于启动活动B的Intent中,然后再启动活动A以再次将值放入Intent中.另一种选择,我更喜欢使用SharedPreferences来完成这项工作.

android-编写Parcelable对象获取java.io.NotSerializableException

android-编写Parcelable对象获取java.io.NotSerializableException

我有一个名为Shop的类,它具有2个字段和1个静态字段.该类实现Parcelable接口:

public class Shop implements Parcelable{
   private static int SHOP_ID = 12;

   private String name;
   private long fund;

   //constructor with parcel
   public Shop(Parcel parcel){
       name = parcel.readString();
       fund = parcel.readLong();
   }

   //normal constructor
   public Shop(Owner owner){
        name = owner.getShopName();
        fund = owner.getFund();
    }

    @Override
  public int describeContents() {
    return 0;
  }

  @Override
  public void writetoParcel(Parcel dest, int flags) {
      dest.writeString(name);
      dest.writeLong(fund);
    }

    public static final Creator<Shop> CREATOR = new Creator<Shop>(){

       @Override
       public Shop createFromParcel(Parcel parcel) {
        //use the constructor which accept parcel
        return new Shop(parcel);
       }

       @Override
       public Shop[] newArray(int size) {
        return new Shop[size];
       }

    };
}

现在,我的代码通过使用常规构造函数启动Shop实例:

Owner owner = getownerInfo();
Shop myShop = new Shop(owner); //initiate a Shop with owner

然后,我的代码将shop实例存储到Android的内部存储中:

String fileName = "shop_file";
try{
  FileOutputStream fos = activity.openFileOutput(fileName,Context.MODE_PRIVATE);
  ObjectOutputStream oos = new ObjectOutputStream(fos);         

  oos.writeObject(myShop); 
  oos.flush();
  oos.close();
}catch(Exception ex){
  ...
}

但是当运行我的应用程序时,我得到了java.io.NotSerializableException:

06-12 13:04:29.258: W/System.err(2632): java.io.NotSerializableException: com.my.app.model.Shop
06-12 13:04:29.258: W/System.err(2632):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
06-12 13:04:29.266: W/System.err(2632):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
06-12 13:04:29.266: W/System.err(2632):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)

为什么?我哪里错了?

解决方法:

从执行看来,您正在尝试序列化未实现Serializable的CartData实例:

java.io.NotSerializableException: com.my.app.model.Shop

如果要序列化,则应让Shop implemensts Serializable

从doc开始

Parcel is not a general-purpose serialization mechanism. This class
(and the corresponding Parcelable API for placing arbitrary objects
into a Parcel) is designed as a high-performance IPC transport. As
such, it is not appropriate to place any Parcel data in to persistent
storage: changes in the underlying implementation of any of the data
in the Parcel can render older data unreadable.

Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload ...

Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload ...

2019-08-20 17:53:24,054 [ERROR] [http-nio-8047-exec-1] [HttpResult.java : 143] 系统异常
org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [VCodeModel]
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.serialize(JdkSerializationRedisSerializer.java:93)
    at org.springframework.data.redis.core.AbstractOperations.rawValue(AbstractOperations.java:117)
    at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:180)
    at com.chinanums.invoice.service.impl.RedisServiceImpl.saveVCode(RedisServiceImpl.java:30)
    at com.chinanums.invoice.service.impl.MsgServiceImpl.send(MsgServiceImpl.java:88)
    at com.chinanums.invoice.controller.MsgController.msg(MsgController.java:36)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1468)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [VCodeModel]
    at org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:68)
    at org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:35)
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.serialize(JdkSerializationRedisSerializer.java:91)
    ... 66 common frames omitted
Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [VCodeModel]
    at org.springframework.core.serializer.DefaultSerializer.serialize(DefaultSerializer.java:43)
    at org.springframework.core.serializer.support.SerializingConverter.convert(SerializingConverter.java:63)
    ... 68 common frames omitted

原因是这个VCodeModel这个类没有进行序列化,所以会报出来这样的异常.

将这个类实现序列化,以后,就不会出现下面的异常了.

今天的关于java-getSerializableExtra返回nulljava返回null的问题的分享已经结束,谢谢您的关注,如果想了解更多关于android java.io.NotSerializableException、android – getIntent().getStringExtra()返回null、android-编写Parcelable对象获取java.io.NotSerializableException、Caused by: java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload ...的相关知识,请在本站进行查询。

本文标签: