1
我试图在AutoCompleteTextView的下拉菜单中显示存储在Firebase中的数据。为此,我正在使用ValueEventListener。据ValueEventListener,ValueEventListener不按预期工作
文档可以使用onDataChange()方法在给定的路径来读取的 内容的静态快照,因为他们在事件发生时存在。 每当数据(包括子项)发生更改时,此方法在连接侦听器时触发一次,并且再次触发 。
不幸的是,在我的情况onDataChange()被触发,只有当改变的数据(也就是,在添加新的数据)。这意味着AutoCompleteTextView不会显示下拉菜单,但不会更改Firebase中的数据。我想要的是,当监听器被调用并且每次数据改变时,onDataChange()第一次触发。我想知道我哪里出错了。下面的代码将出现内部onCreateView片段
的daTags.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Basically, this says "For each DataSnapshot *Data* in dataSnapshot, do what's inside the method.
for (DataSnapshot tagNameSnapshot : dataSnapshot.getChildren()) {
//Get the suggestion by childing the key of the string you want to get.
String ValueTagName = tagNameSnapshot.child(getResources().getString(R.string.Child_AppData_Tags_TagName)).getValue(String.class);
//Add ValueTagName (Value pulled from Firebase for the above Key) to TagList
//Is better to use a List, because you don't know the size of the iterator returned by dataSnapshot.getChildren() to initialize the array
tagList.add(ValueTagName);
//Initialize AutoCompleteTextView and define Adapter
ArrayAdapter<String> adapterAutoComplete = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, tagList);
actv_tagName.setAdapter(adapterAutoComplete);
//Get TagsCount using dataSnapshot and display TagsCount in TextView
TagsCount = dataSnapshot.getChildrenCount() + "";
tv_tagsCount.setText(TagsCount);
}
});
感谢
'onDataChange()'方法确实对初始数据运行一次,然后再按照所述进行任何更改。我猜想问题是使用AutoCompleteTextView和Adapter,尽管我没有时间去测试它。尝试在onDataChange中放入日志消息或其他内容以确认onDataChange是否正在运行。 –
'onDataChange(){}'不提供初始数据。但是,在更改远程数据库中的现有数据(添加新数据)之后,'onDataChange(){}'按预期工作(如上面的问题所述)。我想知道是什么导致'onDataChange(){}'不返回初始数据。 – user3314337
您是如何验证onDataChange第一次未被触发的? –