java - Gson“toJson”函数崩溃(Android Studio)
问题描述
当我使用 Gson 库将 ArrayList 转换为 String 时,我的应用程序崩溃了。但是,它只会在我的智能手机(lg g5,Android 7.0)上崩溃,而不会在 Android Studio Emulator(Nexus 6,Android 9)上崩溃。
是不是 Gson 不兼容 Android 7.0 ?
我尝试过使用旧版本的 Gson。
这是在一个活动中
ArrayList<Character> mCharacters = new ArrayList<>();
private SharedPreferences mPreferences;
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
private void saveGame(){
Gson gson = new Gson();
String json = gson.toJson(mCharacters); //crash here
mPreferences.edit().putString("characters", json).apply();
}
@Override
protected void onDestroy() {
super.onDestroy();
saveGame();
}
这是我的角色java类
public class Character {
private String mName;
private boolean mGirl;
private Drawable mPicture;
public Character(String name, boolean girl, Drawable picture) {
mName = name;
mGirl = girl;
mPicture = picture;
}
public String getName() {
return mName;
}
public boolean isGirl() {
return mGirl;
}
public Drawable getPicture() {
return mPicture;
}
}
我的 mCharacters 在它崩溃之前有 2 个字符。
我没有收到任何错误消息,但我的屏幕冻结并且调试器说该应用程序仍在运行。
解决方案
Drawable
无法转换为 json 对象。所以你的应用程序崩溃了。
您应该将可绘制图像转换为位图并存储在文件存储中,并使用文件路径而不是可绘制对象。
如果您的可绘制图像是从 引用的,res/drawable
那么您也可以使用 int 值 ( R.drawable.image_name
) 并使用该 int 值而不是 Drawable 对象。
推荐阅读
- android - PrintDocumentAdapter 不能为空,当我试图在 android studio 中打印现有的 pdf 文件时
- postgresql - 从列中获取特定字符串,然后需要与 postgresql 中其他表中的列进行比较
- flutter - Flutter项目中的包冲突
- amazon-web-services - AWS EC2 预留实例
- python - 如何防止 Django 管理员删除确认视图显示所有要删除的对象?
- reactjs - 为反应折叠组件添加默认打开逻辑
- php - 如何为“Illuminate\Support\ItemNotFoundException”返回自定义响应?
- angular - Angular typescript 在将子类实现为抽象类时给出参考错误
- sql - 根据 SQL Server 数据库中的条件,使用 OPENQUERY 将数据从 Oracle 链接服务器加载到 SQL Server
- apexcharts - ApexCharts:填补 2 个连续区域图之间的空白