首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在以下文件中保存Uri的ArrayList : NotSerializableException

无法在以下文件中保存Uri的ArrayList : NotSerializableException
EN

Stack Overflow用户
提问于 2012-10-19 03:16:59
回答 2查看 2.8K关注 0票数 4

我必须保存一个Ury的ArrayList,所以我使用以下代码

代码语言:javascript
复制
public static void saveUriList(ArrayList<Uri> myUriList) {
        if (storageAvailable()) {
            try {
                FileOutputStream uriListSaved = new FileOutputStream(
                        baseDir + File.separator + filename);
                ObjectOutputStream uriList = new ObjectOutputStream(
                        uriListSaved);
                uriList.writeObject(myUriList);
                uriList.close();
            } catch (Exception exc) {
                exc.printStackTrace(); 
            }
        }

    }

此代码结构适用于实现可序列化的自定义对象,但对于Uri对象则返回此异常

代码语言:javascript
复制
10-18 21:06:40.169: W/System.err(11957): java.io.WriteAbortedException: Read an exception; java.io.NotSerializableException: android.net.Uri$StringUri
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:933)
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
10-18 21:06:40.169: W/System.err(11957):    at java.util.ArrayList.readObject(ArrayList.java:665)
10-18 21:06:40.169: W/System.err(11957):    at java.lang.reflect.Method.invokeNative(Native Method)
10-18 21:06:40.169: W/System.err(11957):    at java.lang.reflect.Method.invoke(Method.java:507)
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1520)
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1443)
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2112)
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:916)
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2262)
10-18 21:06:40.169: W/System.err(11957):    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2217)
10-18 21:06:40.169: W/System.err(11957):    at it.myApp.testApp.utility.FileArchiveManager.loadUriList(FileArchiveManager.java:158)
10-18 21:06:40.169: W/System.err(11957):    at it.myApp.testApp.MyClass.onCreate(MyClass.java:107)
10-18 21:06:40.169: W/System.err(11957):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-18 21:06:40.169: W/System.err(11957):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
10-18 21:06:40.169: W/System.err(11957):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
10-18 21:06:40.169: W/System.err(11957):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-18 21:06:40.169: W/System.err(11957):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
10-18 21:06:40.169: W/System.err(11957):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-18 21:06:40.169: W/System.err(11957):    at android.os.Looper.loop(Looper.java:130)
10-18 21:06:40.169: W/System.err(11957):    at android.app.ActivityThread.main(ActivityThread.java:3687)
10-18 21:06:40.179: W/System.err(11957):    at java.lang.reflect.Method.invokeNative(Native Method)
10-18 21:06:40.179: W/System.err(11957):    at java.lang.reflect.Method.invoke(Method.java:507)
10-18 21:06:40.179: W/System.err(11957):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
10-18 21:06:40.179: W/System.err(11957):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
10-18 21:06:40.179: W/System.err(11957):    at dalvik.system.NativeStart.main(Native Method)
10-18 21:06:40.179: W/System.err(11957): Caused by: java.io.NotSerializableException: android.net.Uri$StringUri
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535)
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
10-18 21:06:40.179: W/System.err(11957):    at java.util.ArrayList.writeObject(ArrayList.java:651)
10-18 21:06:40.179: W/System.err(11957):    at java.lang.reflect.Method.invokeNative(Native Method)
10-18 21:06:40.179: W/System.err(11957):    at java.lang.reflect.Method.invoke(Method.java:507)
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1219)
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575)
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
10-18 21:06:40.179: W/System.err(11957):    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
10-18 21:06:40.179: W/System.err(11957):    at it.myApp.testApp.utility.FileArchiveManager.salvaListaPathImmagini(FileArchiveManager.java:127)
10-18 21:06:40.179: W/System.err(11957):    at it.myApp.testApp.LoadImage.onActivityResult(LoadImage.java:120)
10-18 21:06:40.179: W/System.err(11957):    at android.app.Activity.dispatchActivityResult(Activity.java:3908)
10-18 21:06:40.179: W/System.err(11957):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
10-18 21:06:40.179: W/System.err(11957):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578)
10-18 21:06:40.179: W/System.err(11957):    at android.app.ActivityThread.access$2000(ActivityThread.java:117)
10-18 21:06:40.179: W/System.err(11957):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965)
10-18 21:06:40.189: W/System.err(11957):    ... 8 more

我认为这是因为Uri没有实现Serializable...

我该如何解决这个问题呢?我必须创建自定义Uri对象吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-19 03:26:13

正如您已经注意到的,Uri没有实现可序列化,请参阅参考android.net.Uri。如何在写入文件时将uris存储为字符串,并在读取文件时使用Uri.parse()将其转换回uris?

票数 8
EN

Stack Overflow用户

发布于 2014-03-08 23:34:13

保存时

代码语言:javascript
复制
String str = myUri.toString();

并在加载时

代码语言:javascript
复制
Uri myUri = Uri.parse(str);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12962081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档