我正在使用Cloud Firestore存储数据。当我尝试读取字符串中带有空格的数据时,出现以下错误消息:
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:473)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:372)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:941)
Caused by: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 79
at com.google.gson.Gson.fromJson(Gson.java:769)
at POS.Firebase.readCounts(Firebase.java:47)
at POS.Main.main(Main.java:52)
... 11 more
Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 79
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1298)
at com.google.gson.stream.JsonReader.nextInObject(JsonReader.java:722)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:382)
at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:349)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:169)
at com.google.gson.Gson.fromJson(Gson.java:755)
... 13 more
从firebase获取数据的代码是
for (DocumentSnapshot documentSnapshot : collection.get().get().getDocuments()) {
JsonReader reader = new JsonReader(new StringReader(String.valueOf(documentSnapshot.getData())));
reader.setLenient(true);
Item item = new Gson().fromJson(reader, Item.class);
Arrays.itemArrayList.add(item);
}
当我输入数据时,有没有一种方法可以存储数据而不添加引号 Data in database
答案 0 :(得分:0)
documentSnapshot.getData()的返回类型为Map。要将Map转换为json对象,只需将值传递给JSONObect构造函数,如下所示
JSONObject jsonObject = new JSONObject(map);
现在您将要面对的问题是Map的键是字符串,但是值是Object,它将在您的JSONObject中打印一些随机值。
所以最好的方法是迭代地图,获取值并从中创建对象。
答案 1 :(得分:0)
得到此错误不是,是因为您在字符串中使用了“空格”,而是因为使用了JSON
。正如Doug Stevenson所说,Firestore不会将数据存储为JSON。您应该根据存储的数据类型来获取数据。
根据DocumentSnapshot文档,您有许多获取数据的选项。您甚至可以使用toObject(Class valueType)方法根据自定义数据类型获取数据。
返回转换为POJO的文档的内容,如果文档不存在,则返回null。
请注意,您可以在Firestore中添加一个“空格”,甚至是一个空String作为String类型的属性的值。两种操作都允许。