【问题标题】:Converting ArrayList<Object> into Json using Gson使用 Gson 将 ArrayList<Object> 转换为 Json
【发布时间】:2018-06-25 23:00:02
【问题描述】:

首先,我对一般的编程比较陌生。对于学校,我正在开发一个 android 项目,我希望能够使用 SharedPreferences 保存数据,使用 Gson 将 ArrayList 转换为 Json。但是,每当我尝试运行它(模拟器)时,我都会在 logcat 中收到以下消息:

Do full code cache collection, code=125KB, data=66KB
After code cache collection, code=104KB, data=41KB
Background concurrent copying GC freed 36221(1156KB) AllocSpace objects, 3(60KB) LOS objects, 49% free, 1708KB/3MB, paused 5.863ms total 115.252ms
Do partial code cache collection, code=123KB, data=56KB
After code cache collection, code=123KB, data=56KB
Increasing code cache capacity to 512KB

这会持续一段时间,直到我的应用崩溃。以与我在这里尝试相同的方式保存其他数据时,我不会遇到此问题。

代码:

向数组中添加对象

for(int x = 0; x < board.getWidth(); x++ ) {
                for( int y = 0; y < board.getHeight(); y++ ) {

                    Field field = (Field) MainActivity.game.getGameBoard().getObject(x, y);
                    fieldArray.add(field);
                }
            }

转换和保存

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = prefs.edit();
Gson objectGson = new Gson();
String objectJson = objectGson.toJson(fieldArray);
edits.putString("gameobjects", objectJson);
editor.apply();

这可能是什么问题?

【问题讨论】:

  • 您的Fields 中有循环引用吗?也许一些通过left, right, up, down 引用定义的邻居?

标签: java android json gson


【解决方案1】:

试试这个

Type listType = new TypeToken<ArrayList<YourObject>>(){}.getType();

listGalerias = new Gson().fromJson(json, listType);

【讨论】:

  • 感谢您的建议。我确实使用 Typetokens 从内存中检索数据并转换回正确的对象,但是首先在 Json 对象中打开 Gson 时会出现问题。所以特别是在这一行: String objectJson = objectGson.toJson(fieldArray);
【解决方案2】:

好的,我在这里尝试过这样的事情,我有一个带有一些字段的对象 Post,我使用 Gson 填充这个对象

val url = "http://www.projectconnect.com.br/make/api/post/list/list.php"

val json = URL(url).readText()

val gson = Gson()

val retorno = gson.fromJson(json, Retorno::class.java)

val posts : List<Post> = retorno.list

结果是这样的 Post object

后来我做了这个

val arrayPosts = arrayOfNulls<Post>(posts.size)
arrayPosts.set(0, posts[0])

for (i in 0 until posts.size) {
    arrayPosts[i] = posts[i]
}

val objectJson = gson.toJson(arrayPosts)

结果是这样的 my objectJson populated

这里是 objectJson value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多