【问题标题】:Parcelling complex objects b/w activities in android在android中的活动之间分割复杂的对象
【发布时间】:2014-05-01 17:40:34
【问题描述】:

我有一个包含 Socket、PrintWriter 类引用的复杂类“Class11”。 我在尝试在活动之间传递它时遇到异常。

  public interface Interface11 extends Parcelable{
    ...........
    }

    public class Class11 implements Interface11 {
       Socket clientSocket;
       ServerSocket serverSocket;

    PrintWriter writer;
          BufferedReader reader;
       private JChatConnection(Parcel in) {

               Object [] objects= in.readArray(Object.class.getClassLoader());
               clientSocket=(Socket) objects[0];
               serverSocket=(ServerSocket) objects[1];
               writer=(PrintWriter) objects[2];
               reader=(BufferedReader) objects[3];

            }


    @Override
    public int describeContents() {

        return 0;
    }



    @Override
    public void writeToParcel(Parcel dest, int flags) {

        Object objects[] = new Object[4];

            objects[0]=clientSocket;
            objects[1]=serverSocket;
            objects[2]=writer;
            objects[3]=reader;

        dest.writeArray(objects);
    }

    public static final Parcelable.Creator<Class11> CREATOR = 
new Parcelable.Creator<Class11>() {
            public Class11 createFromParcel(Parcel in) {
                return new Class11(in);
            }

            public Class11[] newArray(int size) {
                return new Class11[size];
            }
        };

};

虽然我可以选择通过静态对象引用共享它, 但为了减少耦合,我试图通过意图传递它, & 我遇到了异常:

java.lang.RuntimeException: unable to marshall value Socket[address=/192.168.43.225,port=9990,localport=213234]
 at android.os.Parcel.writeValue(Parcel.java:1137)
 at android.os.Parcel.writeArray(Parcel.java: 543)........
  • 是因为 Socket ,PrintWriter 不可分割还是,
  • 我在 writeToParcel() 和 private Class11(Parcel in) 处弄乱了这段代码

有人知道如何在活动之间传递这个对象吗?

【问题讨论】:

  • 只是我们的好奇,您的应用中是否也有 Class1、Class2、Class3...,还是只是一个域名?
  • 这是隐藏我班级原名的残忍企图! - 007 的秘密。

标签: java android sockets serialization parcelable


【解决方案1】:

我建议不要将您的对象实例作为参数传递给 Activity。使其成为单例,或应用程序类的成员。这将允许您在应用程序的任何地方访问 Class11 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多