Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListString到带GSON的字符串-TypeToken_Android_Json_Gson - Fatal编程技术网

Android ListString到带GSON的字符串-TypeToken

Android ListString到带GSON的字符串-TypeToken,android,json,gson,Android,Json,Gson,我正在尝试解析Android应用程序中的JSON数组,其中包含一些URL,以加载到我的SQLite DB中,下面是代码: 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+"',

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

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”:[URL 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);
}
光标;
Array_links=new ArrayList();
SQLiteGallery sqLiteHelper;
SQLiteDatabase SQLiteDatabase;
sqLiteHelper=新SQLiteGallery(此);
sqLiteDatabase=sqLiteHelper.getWritableDatabase();
cursor=sqLiteDatabase.rawQuery(“从“+SQLiteGallery.TAB\u NAME+”中选择*,空);
光标移动位置(0);
Array_links.add(cursor.getString(cursor.getColumnIndex(SQLiteGallery.table_imgurl));
Gson Gson=新的Gson();
Type Type=new-TypeToken().getType();
列出img_url=gson.fromJson(数组链接,类型);
for(字符串url:img_url)
{
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);
     }
光标;
字符串URL;
SQLiteGallery sqLiteHelper;
SQLiteDatabase SQLiteDatabase;
sqLiteHelper=新SQLiteGallery(此);
sqLiteDatabase=sqLiteHelper.getWritableDatabase();
cursor=sqLiteDatabase.rawQuery(“选择*FROM
“+SQLiteGallery.TAB_NAME+”,null);
光标移动位置(0);
URL=
getString(cursor.getColumnIndex(SQLiteGallery.table_imgurl));
Gson Gson=新的Gson();
Type Type=new-TypeToken(){}.getType();
列出img_url=gson.fromJson(URL,类型);
for(字符串url:img_url)
{
System.out.println(url);
}

错误:无法启动activity ComponentInfo{…}:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径$

处为BEGIN_对象。您忘记了
{}
,代码是:

Type type = new TypeToken<List<String>>().getType();
Type Type=new-TypeToken().getType();
应该是:

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

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

Type type = new TypeToken<List<String>>().getType();
Type Type=new-TypeToken().getType();
应该是:

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

谢谢,现在错误出现在下一行:“List img_url=gson.fromJson(Array_links,type);”-无法解析方法“fromJson(java.util.ArrayList,java.lang.reflect(type)”。这是因为数组链接是数组而不是字符串列表定义的吗?使用
gson.fromJson(jsonString,type)时
jsonString
必须是由
type
的同一类型对象生成的字符串。因此,如果
jsonString
来自列表,那么
type
也必须来自列表在我的帖子中进行了编辑,现在代码似乎读取了单元格,但在Android Studio中出现了一个新错误,我没有得到它的内容。@ibai.kar:your
url
是一个字符串,而不是一个字符串列表。好吧,也许我对GSON的理解有问题:输入:我正在读取一个JSONArray,然后GSON将它放入一个字符串中,保存在一个单元格中的SQLite DB中。输出:现在我正在从我的DB中读取它-光标跳到列表\u imgurl中的第0行,它将“URL”的单元格基本上是一个字符串。现在使用GSON/Type,我应该能够将我的字符串转换回字符串列表,对吗?因此,如果我想将类型定义为字符串列表作为最终形式,为什么不将类型定义为字符串列表?谢谢,现在错误出现在下一行:“List img_url=GSON.fromJson(Array_links,Type);”-无法解析方法“fromJson(java.util.ArrayList,java.lang.reflect(Type)”。这是因为数组链接是由数组而不是字符串列表定义的吗?当使用
gson.fromJson(jsonString,Type)时
jsonString
必须是由
type
的同一类型对象生成的字符串。因此,如果
jsonString
来自列表,那么
type
也必须来自列表在我的帖子中进行了编辑,现在代码似乎读取了单元格,但在Android Studio中出现了一个新错误,我没有得到它的内容。@ibai.kar:your
url
是一个字符串,而不是一个字符串列表。好吧,也许我对GSON的理解有问题:输入:我正在读取一个JSONArray,然后GSON将它放入一个字符串中,保存在一个单元格中的SQLite DB中。输出:现在我正在从我的DB中读取它-光标跳到列表\u imgurl中的第0行,它将将单元格转换为“URL”,基本上是一个字符串。现在使用GSON/Type,我应该能够将我的字符串转换回字符串列表,对吗?因此,如果我想将类型定义为字符串列表,为什么不将类型定义为字符串列表呢?