Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将自定义数组添加到android中的共享首选项_Android_Arraylist_Sharedpreferences - Fatal编程技术网

将自定义数组添加到android中的共享首选项

将自定义数组添加到android中的共享首选项,android,arraylist,sharedpreferences,Android,Arraylist,Sharedpreferences,我正在尝试添加一个自定义数组到android中的共享首选项 我有一个自定义arrayList,它包含集合数据(字符串和节点列表),数据存储在一个数组中,数组名为arrayList menuItems=new arrayList() 我找到了一个解决方案,它说我应该使用一个“ObjectSerializer”类来存储数据。一切正常,直到某一点,我得到以下错误 W/System.err(32052): java.io.NotSerializableException: package.XMLData

我正在尝试添加一个自定义数组到android中的共享首选项

我有一个自定义arrayList,它包含集合数据(字符串和节点列表),数据存储在一个数组中,数组名为
arrayList menuItems=new arrayList()
我找到了一个解决方案,它说我应该使用一个“ObjectSerializer”类来存储数据。一切正常,直到某一点,我得到以下错误

W/System.err(32052): java.io.NotSerializableException: package.XMLDataArrayStructure
W/System.err(32052):    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
W/System.err(32052):    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
W/System.err(32052):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
W/System.err(32052):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
W/System.err(32052):    at java.util.ArrayList.writeObject(ArrayList.java:644)
W/System.err(32052):    at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(32052):    at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err(32052):    at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053)
W/System.err(32052):    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
W/System.err(32052):    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
W/System.err(32052):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
W/System.err(32052):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
W/System.err(32052):    at package.ObjectSerializer.serialize(ObjectSerializer.java:17)
W/System.err(32052):    at package.GatherXMLData.getData(GatherXMLData.java:94)
W/System.err(32052):    at package.Splash$gatherData.doInBackground(Splash.java:63)
W/System.err(32052):    at package.Splash$gatherData.doInBackground(Splash.java:1)
W/System.err(32052):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
W/System.err(32052):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
W/System.err(32052):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W/System.err(32052):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
W/System.err(32052):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err(32052):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err(32052):    at java.lang.Thread.run(Thread.java:864)
它在以下方面失败了

public static String serialize(Serializable obj) throws IOException {
    if (obj == null)
        return "";
    ByteArrayOutputStream serialObj = new ByteArrayOutputStream();
    ObjectOutputStream objStream = new ObjectOutputStream(serialObj);
    objStream.writeObject(obj);
    objStream.close();
    return encodeBytes(serialObj.toByteArray());
}
有人能帮忙吗,这对我真的很有帮助,因为那时我只需要打一个网络电话

谢谢

编辑

下面是XMLDataArrayStructure类的代码,它确实实现了serializable,但我仍然得到以下错误

代码

public class XMLDataArrayStructure implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    String title, date, start_time, end_time, venue, image, sponsor_logo;
    NodeList people;
    Spanned description;

    public void setPeople(NodeList people) {
        this.people = people;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public void setStartTime(String start_time) {
        this.start_time = start_time;
    }

    public void setEndTime(String end_time) {
        this.end_time = end_time;
    }

    public void setVenue(String venue) {
        this.venue = venue;
    }

    public void setDescription(Spanned spanned) {
        this.description = spanned;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public void setSponsorLogo(String sponsor_logo) {
        this.sponsor_logo = sponsor_logo;
    }

    public NodeList getPeople() {
        return people;
    }

    public String getTitle() {
        return title;
    }

    public String getDate() {
        return date;
    }

    public String getStartTime() {
        return start_time;
    }

    public String getEndTime() {
        return end_time;
    }

    public String getVenue() {
        return venue;
    }

    public Spanned getDescription() {
        return description;
    }

    public String getImage() {
        return image;
    }

    public String getSponsorLogo() {
        return sponsor_logo;
    }

}
错误

W/System.err(1380): java.io.NotSerializableException: android.text.SpannableStringBuilder
W/System.err(1380):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
W/System.err(1380):     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979)
W/System.err(1380):     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368)
W/System.err(1380):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074)
W/System.err(1380):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
W/System.err(1380):     at java.util.ArrayList.writeObject(ArrayList.java:644)
W/System.err(1380):     at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err(1380):     at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err(1380):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1053)
W/System.err(1380):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517)
W/System.err(1380):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481)
W/System.err(1380):     at package.ObjectSerializer.serialize(ObjectSerializer.java:17)
W/System.err(1380):     at package.GatherXMLData.getData(GatherXMLData.java:89)
W/System.err(1380):     at package.Splash$gatherData.doInBackground(Splash.java:63)
W/System.err(1380):     at package.Splash$gatherData.doInBackground(Splash.java:1)
W/System.err(1380):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
W/System.err(1380):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
W/System.err(1380):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
W/System.err(1380):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
W/System.err(1380):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
W/System.err(1380):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
W/System.err(1380):     at java.lang.Thread.run(Thread.java:864)

很可能,您的类
XMLDataArrayStructure
是不可序列化的。可能有两个原因:

  • 您的类本身没有实现可序列化的

  • 即使类实现了
    Serializable
    接口包含引用非
    Serializable
    对象的语句。


  • 如果可以的话,请张贴课程代码。

    你有该课程的文档吗?我相信这是OP使用的自定义类。什么是
    NodeList
    span
    ?它们是可序列化的吗?NodeList包含一个xml数据集,而span是一个html数据集。我怎么知道它们是否可序列化?你有这两个类的定义或文档吗?我没有,但我已经把它们去掉了,函数现在可以工作了。我必须想出一种不同的方法来存储数据集。谢谢你的帮助:)
    Class XMLDataArrayStructure implements Serializable