【问题标题】:ListString to string with GSON - TypeTokenListString 到 GSON 的字符串 - TypeToken
【发布时间】:2018-08-05 08:05:39
【问题描述】:

我正在尝试在我的 Android 应用程序中解析一个 JSON 数组,其中包含一些 URL 以加载到我的 SQLite 数据库中,代码如下:

JSONArray pics = json.getJSONArray("bilder");
Gson gson = new Gson();
String obj = gson.toJson(pics);
String SQLiteDataBaseQuery = "INSERT INTO images_table (id,desc,imgurl) VALUES('"+i+"', '"+jr_desc+"', '"+obj+"');";
sqLiteDatabase.execSQL(SQLiteDataBaseQuery);

使用模拟器读取数据库我可以看到字符串 {"values":[URLS here]}。 GSON 在我的字符串列表前面写这个“值”正常吗?

所以,现在我想从我的数据库中调用信息:

Cursor cursor;
Array_links = new ArrayList<String>();
SQLiteGallery sqLiteHelper;
SQLiteDatabase sqLiteDatabase;
sqLiteHelper = new SQLiteGallery(this);
sqLiteDatabase = sqLiteHelper.getWritableDatabase();
cursor = sqLiteDatabase.rawQuery("SELECT * FROM "+SQLiteGallery.TAB_NAME+"", null);
cursor.moveToPosition(0);
Array_links.add(cursor.getString(cursor.getColumnIndex(SQLiteGallery.table_imgurl)));
Gson gson = new Gson();
Type type = new TypeToken<List<String>>().getType();
List<String> img_urls = gson.fromJson(Array_links,type);
for(String url : img_urls)
{
    System.out.println(url);
}

Android Studio 给我以下错误:

TypeToken 在 'com.google.gson.reflect.TypeToken' 中具有受保护的访问权限

这是什么意思?我的代码错了吗?

谢谢

此处的正确代码:

     Cursor cursor;
     String urls;
     SQLiteGallery sqLiteHelper;
     SQLiteDatabase sqLiteDatabase;
     sqLiteHelper = new SQLiteGallery(this);
     sqLiteDatabase = sqLiteHelper.getWritableDatabase();
     cursor = sqLiteDatabase.rawQuery("SELECT * FROM 
     "+SQLiteGallery.TAB_NAME+"", null);
     cursor.moveToPosition(0);
     urls = 
     cursor.getString(cursor.getColumnIndex(SQLiteGallery.table_imgurl));
     Gson gson = new Gson();
     Type type = new TypeToken<List<String>>(){}.getType();
     List<String> img_urls = gson.fromJson(urls,type);
     for(String url : img_urls)
     {
     System.out.println(url);
     }

错误:无法启动活动 ComponentInfo{...}:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT

【问题讨论】:

    标签: android json gson


    【解决方案1】:

    您忘记了{},您的代码是:

    Type type = new TypeToken<List<String>>().getType();
    

    应该是:

    Type type = new TypeToken<List<String>>(){}.getType();
    

    【讨论】:

    • 谢谢,现在错误在下一行:“List img_urls = gson.fromJson(Array_links,type);” - 无法解析方法 'fromJson(java.util.ArrayList,java.lang.reflect(Type)'。是因为 Array Links 定义为 Array 而不是 String List?
    • 当使用gson.fromJson(jsonString, type); 时,jsonString 必须是从type 的同一类型对象生成的字符串。因此,如果 jsonString 来自 List 那么 type 也必须来自 List
    • 对我的帖子进行了编辑,现在代码似乎读取了单元格,但 Android Studio 中出现了一个新错误,我不明白它是关于什么的。
    • @ibai.kar: 你的urls 是一个字符串而不是一个字符串列表。
    • 好吧,也许我对 GSON 的理解存在问题: 输入:我正在读取 JSONArray,然后 GSON 将其放入一个字符串中,该字符串保存在我的 SQLite DB 中的一个单元格中。输出:现在我正在从我的数据库中读取它——光标跳到 table_imgurl 列中的第 0 行,它将单元格的内容放到“urls”中,这基本上是一个字符串。现在使用 GSON / Type 我应该能够将我的字符串转换回字符串列表,对吗?因此,如果我想将 Type 作为我的最终形式,为什么不将 Type 定义为 List of String?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多