Java 应为BEGIN_数组,但在第1行第2列为BEGIN_对象,jsonSyntax错误
我想将Java 应为BEGIN_数组,但在第1行第2列为BEGIN_对象,jsonSyntax错误,java,android,json,hashset,Java,Android,Json,Hashset,我想将Hashset对象保存到SharedReference中,然后检索该数据。我正在将数据存储到hashset中,并使用Gson将对象转换为json。实际上,我正在将位图存储到Hashset中。我能够将Hashsetobject转换并保存为SharedReference。在检索json并将其转换为Hashset对象时,我遇到了问题 HashSet<images> img = new HashSet<images>(CIRCLES_LIMIT); 方法检索该对象
Hashset
对象保存到SharedReference
中,然后检索该数据。我正在将数据存储到hashset
中,并使用Gson
将对象转换为json
。实际上,我正在将位图存储到Hashset
中。我能够将Hashsetobject
转换并保存为SharedReference
。在检索json
并将其转换为Hashset
对象时,我遇到了问题
HashSet<images> img = new HashSet<images>(CIRCLES_LIMIT);
方法检索该对象
public void openString() {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getContext());
Gson gson = new Gson();
String jsonSquare=sharedPrefs.getString("kEySquare",null);
Type typeSquare = new TypeToken<HashSet<images>>(){}.getType();
HashSet<images> arrayListSquare = gson.fromJson(jsonSquare,typeSquare);`//getting Exception here jsonSyntax Error`
if (arrayListSquare != null) {
img = arrayListSquare;
}
}
public void openString(){
SharedReferences SharedRefers=PreferenceManager.GetDefaultSharedReferences(getContext());
Gson Gson=新的Gson();
字符串jsonSquare=sharedPrefs.getString(“kEySquare”,null);
Type typeSquare=new-TypeToken(){}.getType();
HashSet arrayListSquare=gson.fromJson(jsonSquare,typeSquare);`//在这里获取异常jsonSyntax错误`
if(arrayListSquare!=null){
img=阵列列表平方;
}
}
根据您的评论,您的json
格式不正确,因此Gson
可以在您在string
中接收圆属性时对其进行解析,而不是作为json
{
"img": "[Circle[218.69626, 475.58936, 0,android.graphics.Bitmap@42e13c70,0.0,0.0,0.0,0.0,0.0,0.0,], Circle[186.74065, 670.43713, 0,android.graphics.Bitmap@42e13c70,0.0,0.0,0.0,0.0,0.0,0.0,]]"
}
因此,您的Json
将作为对象接收,该对象只有img
属性
您正在将其解析为数组。这是错误的。因此,请与您的后端开发人员联系,并相应地更改
json
结构。根据您的评论,您的json
格式不正确,因此Gson
可以在接收string
中的圆圈属性时解析它,而不是json
{
"img": "[Circle[218.69626, 475.58936, 0,android.graphics.Bitmap@42e13c70,0.0,0.0,0.0,0.0,0.0,0.0,], Circle[186.74065, 670.43713, 0,android.graphics.Bitmap@42e13c70,0.0,0.0,0.0,0.0,0.0,0.0,]]"
}
因此,您的Json
将作为对象接收,该对象只有img
属性
您正在将其解析为数组。这是错误的。因此,请与后端开发人员联系,并相应地更改
json
结构。您序列化了一个对象,并希望将其反序列化为哈希集。这就是问题所在
Object spSquare = c.getStringDrawObjImages();
spSquare是什么类型的?假设它是'Foo.class',您应该像这样反序列化它:
Foo foo = gson.fromJson(jsonString, Foo.class);
“foo.img”应该是您的哈希集您序列化了一个对象,并希望将其反序列化为哈希集。这就是问题所在
Object spSquare = c.getStringDrawObjImages();
spSquare是什么类型的?假设它是'Foo.class',您应该像这样反序列化它:
Foo foo = gson.fromJson(jsonString, Foo.class);
'foo.img'应该是你的HashSet分享你的json{“img”:“[Circle[218.69626475.58936,0,android.graphics。Bitmap@42e13c70,0.0,0.0,0.0,0.0,0.0,0.0,],圆圈[186.74065670.43713,0,android.graphics。Bitmap@42e13c70,0.0,0.0,0.0,0.0,0.0,0.0,]]“}共享您的json{“img”:“[Circle[218.69626475.58936,0,android.graphics。Bitmap@42e13c70,0.0,0.0,0.0,0.0,0.0,0.0,],圆圈[186.74065670.43713,0,android.graphics。Bitmap@42e13c70,0.0,0.0,0.0,0.0,0.0,0.0,]]" }事实上,我已经在jsonlint.com中检查了json,它显示有效json@NitinMakwana它是有效的json,但对于通过GSONI解析为数组无效是否可以将位图转换为json?@NitinMakwana您需要将图像转换为Base64字符串,然后可以通过json将其作为字符串发送。但在服务器上,您需要将Base64字符串更改为图像。@NitinMakwana reference。但是如果有图像日志,那么我建议在JSONA中设置这些图像的url。实际上,我已经在jsonlint.com中检查了json,并且它显示有效json@NitinMakwana它是有效的json,但对于通过GSONI解析为数组无效。是否可以将位图转换为json?@NitinMakwana您需要将图像转换为Base64字符串,然后您可以通过json将其作为字符串发送。但在服务器上,您需要再次将Base64字符串更改为image。@NitinMakwana引用。但如果有图像日志,则我建议在JSONY中设置这些图像的url。您应该找到正确的类。spSquare的类型到底是什么?它似乎只有一个字段,即“im”而字段“img”原来是你的哈希集,不是吗?你应该找到正确的类。spSquare的类型到底是什么?它似乎只有一个字段是“img”,而字段“img”原来是你的哈希集,不是吗?