Java 如何使匿名类可序列化并将其传递给IntentService

Java 如何使匿名类可序列化并将其传递给IntentService,java,android,serializable,anonymous,Java,Android,Serializable,Anonymous,我正在尝试让android应用程序在后台运行。所以我创建了一个IntentService,我必须向它传递一个对象。所以我让那个物体可以包裹。问题是此对象包含另一个包含处理程序的对象。因此,我考虑将内部对象序列化,以便传递它。但我犯了这个错误 07-29 10:16:08.660:E/AndroidRuntime29387:致命异常:主 07-29 10:16:08.660:E/AndroidRuntime29387:java.lang.RuntimeException:无法启动activity

我正在尝试让android应用程序在后台运行。所以我创建了一个IntentService,我必须向它传递一个对象。所以我让那个物体可以包裹。问题是此对象包含另一个包含处理程序的对象。因此,我考虑将内部对象序列化,以便传递它。但我犯了这个错误

07-29 10:16:08.660:E/AndroidRuntime29387:致命异常:主 07-29 10:16:08.660:E/AndroidRuntime29387:java.lang.RuntimeException:无法启动activity ComponentInfo{tinygsn.gui.android/tinygsn.gui.android.ActivityListVSNew}:java.lang.RuntimeException:Parcelable遇到IOException写入序列化对象名称=tinygsn.controller.AndroidControllerListVSNew 07-29 10:16:08.660:E/AndroidRuntime29387:at android.app.ActivityThread.performLaunchActivityActivityThread.java:2110 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.app.ActivityThread.handleLaunchActivityActivityThread.java:2135 07-29 10:16:08.660:E/AndroidRuntime29387:at android.app.ActivityThread.access$700ActivityThread.java:140 07-29 10:16:08.660:E/AndroidRuntime29387:at android.app.ActivityThread$H.handleMessageActivityThread.java:1237 07-29 10:16:08.660:E/AndroidRuntime29387:at android.os.Handler.dispatchMessageHandler.java:99 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.os.Looper.Looper.java:137 07-29 10:16:08.660:E/AndroidRuntime29387:at android.app.ActivityThread.mainActivityThread.java:4921 07-29 10:16:08.660:E/AndroidRuntime29387:at java.lang.reflect.Method.invokenactive方法 07-29 10:16:08.660:E/AndroidRuntime29387:at java.lang.reflect.Method.invokeMethod.java:511 ?07-29 10:16:08.660:E/AndroidRuntime29387:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:1027 07-29 10:16:08.660:E/AndroidRuntime29387:com.android.internal.os.ZygoteInit.mainZygoteInit.java:794 07-29 10:16:08.660:E/AndroidRuntime29387:at dalvik.system.NativeStart.main本地方法 07-29 10:16:08.660:E/AndroidRuntime29387:原因:java.lang.RuntimeException:Parcelable在写入可序列化对象名称时遇到IOException=tinygsn.controller.AndroidControllerListVSNew 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.os.Parcel.writeSerializableParcel.java:1279 07-29 10:16:08.660:E/AndroidRuntime29387:at tinygsn.beans.VSensorConfig.writeToParcelVSensorConfig.java:772 07-29 10:16:08.660:E/AndroidRuntime29387:at android.os.Parcel.writeParcelableParcel.java:1254 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.os.Parcel.writeValueParcel.java:1173 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.os.Parcel.writeMapInternalParcel.java:591 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.os.Bundle.writeToParcelBundle.java:1619 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.os.Parcel.writeBundleParcel.java:605 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.content.Intent.WriteToParcelinent.java:6814 07-29 10:16:08.660:E/AndroidRuntime29387:at android.app.ActivityManagerProxy.startServiceActivityManagerActive.java:2655 07-29 10:16:08.660:E/AndroidRuntime29387:at android.app.ContextImpl.startServiceContextImpl.java:1322 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.content.ContextWrapper.startServiceContextWrapper.java:390 07-29 10:16:08.660:E/AndroidRuntime29387:at tinygsn.model.vsensor.VirtualSensor.startVirtualSensor.java:109 07-29 10:16:08.660:E/AndroidRuntime29387:at tinygsn.controller.AndroidControllerListVSNew.startActiveVSAndroidControllerListVSNew.java:126 07-29 10:16:08.660:E/AndroidRuntime29387:at tinygsn.gui.android.ActivityListVSNew.setUpControllerActivityListVSNew.java:98 07-29 10:16:08.660:E/AndroidRuntime29387:at tinygsn.gui.android.ActivityListVSNew.onCreateActivityListVSNew.java:82 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.app.Activity.performCreateActivity.java:5206 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.app.Instrumentation.callActivityOnCreateInstrumentation.java:1094 07-29 10:16:08.660:E/AndroidRuntime29387:at android.app.ActivityThread.performLaunchActivityActivityThread.java:2074 2007-29 10:16:08.660:E/AndroidRuntime29387:。。。还有11个 07-29 10:16:08.660:E/AndroidRuntime29387:原因:java.io.NotSerializableException:tinygsn.gui.android.ActivityListVSNew$1 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.WriteNewObjectOutputStream.java:1364 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.writeObjectInternalObjectOutputStream.java:1671 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.WriteObjectOutputStream.java:1517 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.writeObjectObjectOutputStream.java :1481 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.writeFieldValuesObjectOutputStream.java:979 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.DefaultWriteObjectOutputStream.java:368 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.writeHierarchyObjectOutputStream.java:1074 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.WriteNewObjectOutputStream.java:1404 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.writeObjectInternalObjectOutputStream.java:1671 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.WriteObjectOutputStream.java:1517 07-29 10:16:08.660:E/AndroidRuntime29387:at java.io.ObjectOutputStream.WriteObjectOutputStream.java:1481 07-29 10:16:08.660:E/AndroidRuntime29387:at-android.os.Parcel.writeSerializableParcel.java:1274 2007-29 10:16:08.660:E/AndroidRuntime29387:。。。28多

下面是代码的一些部分:

public class VSensorConfig implements Parcelable  {
    dest.writeSerializable(getController());

}
public static final Parcelable.Creator<VSensorConfig> CREATOR  = new Creator<VSensorConfig>() {

    public VSensorConfig createFromParcel(Parcel source) {


        return new VSensorConfig(source);
    }

    public VSensorConfig[] newArray(int size) {

        return new VSensorConfig[size];
    }

};
}

这是我的另一门课:

public class ActivityListVSNew extends SherlockActivity implements Serializable  {
public void setUpController() {
    handlerVS = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            vsList = (ArrayList<VirtualSensor>) msg.obj;
            renderLayout(vsList);
        };
    };

    controller = new AndroidControllerListVSNew(this);
    controller.setHandlerVS(handlerVS);
    controller.loadListVS();
    controller.startActiveVS();
}
还有别的办法吗? 如果没有,我如何将此对象传递给我的服务。我使用putPracable方法将数据发送到IntentService


谢谢

我不理解这种困惑。您可以在实现parcelable的主对象内部定义如何向内部第二个对象写入/读取包裹,或者也可以使第二个对象实现parcelable。是否包含处理程序无关紧要问题是处理程序不是我定义的类。因此,我无法使其序列化,或者Parceblue可以扩展处理程序,但parcelable的目的仍然是将数据从一个组件交换到另一个组件,在处理程序中,u通常只提供一些调用某些方法的功能。我没有得到您的建议?在实现的对象的writeToParcel方法中parcelable提供写入内部对象的逻辑。如果你能发布你需要传递的数据的简化版本,我可以给出一个更准确的答案