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

时间:2014-07-29 09:27:21

标签: java android serializable anonymous

我正在尝试让android应用程序在后台运行。所以我创建了一个IntentService,我必须将一个对象传递给它。所以我让Object实现了Parcelable。 Probelm是该对象包含另一个包含处理程序的对象。所以我想让内部对象可序列化以便传递它将包裹。但我得到了这个错误。

  

07-29 10:16:08.660:E / AndroidRuntime(29387):致命异常:主要   07-29 10:16:08.660:E / AndroidRuntime(29387):java.lang.RuntimeException:无法启动活动ComponentInfo {tinygsn.gui.android/tinygsn.gui.android.ActivityListVSNew}:java.lang.RuntimeException:Parcelable遇到IOException编写可序列化对象(name = tinygsn.controller.AndroidControllerListVSNew)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.ActivityThread.access $ 700(ActivityThread.java:140)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1237)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Handler.dispatchMessage(Handler.java:99)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Looper.loop(Looper.java:137)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.ActivityThread.main(ActivityThread.java:4921)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.lang.reflect.Method.invokeNative(Native Method)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.lang.reflect.Method.invoke(Method.java:511)   ?07-29 10:16:08.660:E / AndroidRuntime(29387):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1027)   07-29 10:16:08.660:E / AndroidRuntime(29387):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)   07-29 10:16:08.660:E / AndroidRuntime(29387):at dalvik.system.NativeStart.main(Native Method)   07-29 10:16:08.660:E / AndroidRuntime(29387):引起:java.lang.RuntimeException:Parcelable遇到IOException写入可序列化对象(name = tinygsn.controller.AndroidControllerListVSNew)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Parcel.writeSerializable(Parcel.java:1279)   07-29 10:16:08.660:E / AndroidRuntime(29387):at tinygsn.beans.VSensorConfig.writeToParcel(VSensorConfig.java:772)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Parcel.writeParcelable(Parcel.java:1254)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Parcel.writeValue(Parcel.java:1173)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Parcel.writeMapInternal(Parcel.java:591)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Bundle.writeToParcel(Bundle.java:1619)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Parcel.writeBundle(Parcel.java:605)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.content.Intent.writeToParcel(Intent.java:6814)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.ActivityManagerProxy.startService(ActivityManagerNative.java:2655)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.ContextImpl.startService(ContextImpl.java:1322)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.content.ContextWrapper.startService(ContextWrapper.java:390)   07-29 10:16:08.660:E / AndroidRuntime(29387):at tinygsn.model.vsensor.VirtualSensor.start(VirtualSensor.java:109)   07-29 10:16:08.660:E / AndroidRuntime(29387):at tinygsn.controller.AndroidControllerListVSNew.startActiveVS(AndroidControllerListVSNew.java:126)   07-29 10:16:08.660:E / AndroidRuntime(29387):at tinygsn.gui.android.ActivityListVSNew.setUpController(ActivityListVSNew.java:98)   07-29 10:16:08.660:E / AndroidRuntime(29387):at tinygsn.gui.android.ActivityListVSNew.onCreate(ActivityListVSNew.java:82)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.Activity.performCreate(Activity.java:5206)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)   07-29 10:16:08.660:E / AndroidRuntime(29387):......还有11个   07-29 10:16:08.660:E / AndroidRuntime(29387):引起:java.io.NotSerializableException:tinygsn.gui.android.ActivityListVSNew $ 1   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)   07-29 10:16:08.660:E / AndroidRuntime(29387):at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)   07-29 10:16:08.660:E / AndroidRuntime(29387):在android.os.Parcel.writeSerializable(Parcel.java:1274)   07-29 10:16:08.660:E / AndroidRuntime(29387):... 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。

由于

0 个答案:

没有答案