首页 > 解决方案 > 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 个字符。

我没有收到任何错误消息,但我的屏幕冻结并且调试器说该应用程序仍在运行。

标签: javaandroid

解决方案


Drawable无法转换为 json 对象。所以你的应用程序崩溃了。

您应该将可绘制图像转换为位图并存储在文件存储中,并使用文件路径而不是可绘制对象。

如果您的可绘制图像是从 引用的,res/drawable那么您也可以使用 int 值 ( R.drawable.image_name) 并使用该 int 值而不是 Drawable 对象。


推荐阅读