java.io.NotSerializableException: androidx.emoji2.text.SpannableBuilder问题求助
问题解决:java.io.NotSerializableException: androidx.emoji2.text.SpannableBuilder
问题原因
你的保存逻辑中,UpdateText方法直接将EditText返回的CharSequence对象存入Note实例。当用户输入表情符号时,Android系统会用SpannableBuilder(emoji2库中的类)包装文本,而这个类未实现Serializable接口,导致序列化整个State对象时抛出异常。之前功能正常是因为未触发表情输入场景,此时CharSequence是普通的Serializable实现类(如String)。
修复方案
修改UpdateText方法,将CharSequence转换为String后再存入Note对象——String天然支持Serializable:
private void UpdateText(CharSequence text){ State.St.st_current.getNote(noteId).setText(String.valueOf(text)); }
同时确保Note类中的text字段类型为String(而非CharSequence),避免后续序列化出现兼容问题:
public class Note implements Serializable { private String title; private String text; // 用String类型存储文本 // getter和setter方法 public String getText() { return text; } public void setText(String text) { this.text = text; } }
验证逻辑
修改后,无论EditText返回的是普通String还是带表情的SpannableBuilder,都会被转换为String保存,既保留了完整文本内容(包括表情的字符表示),又保证了序列化的兼容性。
原错误日志
2022-07-12 07:20:57.196 28080-28080/com.learn.myapplication W/System.err: java.io.NotSerializableException: androidx.emoji2.text.SpannableBuilder 2022-07-12 07:20:57.196 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240) 2022-07-12 07:20:57.196 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604) 2022-07-12 07:20:57.196 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565) 2022-07-12 07:20:57.196 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.util.ArrayList.writeObject(ArrayList.java:762) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.lang.reflect.Method.invoke(Native Method) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1036) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1552) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565) 2022-07-12 07:20:57.197 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488) 2022-07-12 07:20:57.198 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234) 2022-07-12 07:20:57.198 28080-28080/com.learn.myapplication W/System.err: at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354) 2022-07-12 07:20:57.198 28080-28080/com.learn.myapplication W/System.err: at com.learn.myapplication.Utility$ManageData.SaveState(Utility.java:34)
内容的提问来源于stack exchange,提问作者Shogery
相关产品推荐
相关产品推荐

