Android Studio Firebase Firestore 无法检索字段数据
Posted
技术标签:
【中文标题】Android Studio Firebase Firestore 无法检索字段数据【英文标题】:Android studio Firebase Firestore cann't retrieve field data 【发布时间】:2022-01-12 12:19:50 【问题描述】:我正在尝试从 firestore 中的字符串字段 group_name 检索值,但我收到 NullPointerException,因为该值没有被检索并添加到数组列表中。所以数组列表是空的。我正在尝试在 OnCreateView 中获取数据,因为我正在处理片段。添加数据非常有效(createNewGroup())。
@Override
public void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
mAuth = FirebaseAuth.getInstance();
currentUser = mAuth.getCurrentUser();
db = FirebaseFirestore.getInstance();
//FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder().setPersistenceEnabled(true).setCacheSizeBytes(FirebaseFirestoreSettings.CACHE_SIZE_UNLIMITED).build();
//db.setFirestoreSettings(settings);
groupList = new ArrayList<>();
gridView = view.findViewById(R.id.notes_gridview);
//Source source = Source.CACHE;
//https://firebase.google.com/docs/firestore/query-data/get-data#source_options
db.collection("groups").document(key).get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>()
@Override
public void onSuccess(DocumentSnapshot documentSnapshot)
if (documentSnapshot.exists())
groupList.add(documentSnapshot.getString("group_name"));
Log.w(TAG, "DocumentSnapshot data: " + documentSnapshot.getData());
adpter = new GroupAdapter(getActivity(), groupList);
gridView.setAdapter(adpter);
mProgressCircle.setVisibility(View.INVISIBLE);
else
Log.w(TAG, "No such document");
).addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
Log.w(TAG, "Error getting documents: " + e.getMessage());
);
private void CreateNewGroup(String groupName)
HashMap<String, String> groupData = new HashMap<>();
groupData.put("group_name", groupName);
HashMap<String, Object> update = new HashMap<>();
update.put(key, groupData);
db.collection("groups").document(key).set(update).addOnSuccessListener(new OnSuccessListener<Void>()
@Override
public void onSuccess(Void unused)
Log.w(TAG, "New group added successfully to Firestore");
((NavigationHost) getActivity()).navigateTo(new MyGroupsFragment(), false);
).addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
Toast.makeText(getActivity(), "Failed adding new group to firestore", Toast.LENGTH_LONG).show();
);
更新:
【问题讨论】:
这能回答你的问题吗? What is a NullPointerException, and how do I fix it? 你为什么要在 onCreate 中这样做?如果这是一个片段,请使用 onViewCreated 问题是“group_name”字段的值没有被添加到组列表中,所以它保持为空。这会导致 NullPointerException。所以不,这不能回答我的问题。 Oncreate 通常不是问题。 @a_local_nobody 我添加了截图以更好地解释问题 【参考方案1】:问题似乎在于您创建的文档比您预期的嵌套程度更高,并且在文档本身中包含了文档 ID。您创建了类似这样的内容(您可以在 Firestore 屏幕截图以及您发布的日志输出中看到):
collection[docId] = docId=group_name=Test
当我认为你打算创建时
collection[docId] = group_name=Test
要解决此问题,您只需将CreateNewGroup
中的document(key).set(update)
更改为document(key).set(groupData)
。
Firestore docs 中有几个有用的示例说明如何设置和更新文档数据。
或者,如果这是您想要的文档结构,您需要更改检索group_name
的方式。
代替
String group = documentSnapshot.getString("group_name");
您需要这样的东西来首先检索嵌套地图,然后从中获取group_name
属性
String group = documentSnapshot.getData().get(key).get("group_name");
【讨论】:
谢谢你解决了这个问题以上是关于Android Studio Firebase Firestore 无法检索字段数据的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio、谷歌 Firebase、谷歌地图
尝试从 Android Studio 添加 Firebase 项目时出错
Android Studio中的Firebase android jars文档/javadoc [重复]
无法在 android studio 中设置 firebase