如果我给出了部件号,我正试图显示部件的“loc”。 这是数据结构的样子:
{
"parts":{
"14521845": { "name":"TOOL EC160B/EC180B/EC210B/EC240", "loc":"EXC1", "sloc":"B3EGU01C03"},
"12829050": { "name":"SWITCH; IGNITION SWITCH", "loc":"PS01", "sloc":"85-06-013"},
"12829050": { "name":"SWITCH; IGNITION SWITCH", "loc":"COM1", "sloc":"B3RGK03D06"},
"20044893": { "name":"PARTS CATALOG_ENG_SPA_FRE_GER_KOR_EC210D", "loc":"EXC1", "sloc":"B3EGT01B02"}
}
}
活动代码:
FirebaseDatabase firebaseDatabase=FirebaseDatabase.getInstance();
DatabaseReference databaseReference =firebaseDatabase.getReference("parts/"+curP);
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Products data=dataSnapshot.getValue(Products.class);
Log.i("",String.valueOf(data.getLoc()));
}
getLoc是Product类的getter函数,它返回给定curP的相应“loc”。 curP表示部分中的子值。
逻辑对我来说似乎是正确的,但我没有得到输出。我在哪里错了?
答案 0 :(得分:1)
试试这个
getReference("parts").child(curP).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Products data = dataSnapshot.getValue(Products.class);
Log.i("", String.valueOf(data.getLoc()));
}
});
答案 1 :(得分:0)
您可以尝试使用ValueEventListener。如果您想要读取一次数据,请使用addListenerForSingleValueEvent方法,如下所示:
public async Task<Dictionary<string, string[]>> GetTemplates(string showName)
{
Dictionary<string, string[]> d = new Dictionary<string, string[]>();
// Get element collection uri of show "DemoShow"
var elementCollectionUriTask = Task.Run(() => GetElementCollectionUri(vizServiceDocURL, showName));
var elementCollectionUri = await elementCollectionUriTask;
var templateCollectionUriTask = Task.Run(() => GetTemplateCollectionUri(elementCollectionUri));
var templateCollectionUri = await templateCollectionUriTask;
var templateNamesTask = Task.Run(() => GetListOfTemplateName(templateCollectionUri));
var templateNames = await templateNamesTask;
//get the name and links from each show and add them to the dictionary
foreach (string templateName in templateNames)
{
var templateCollectionEntryUriTask = Task.Run(() => GetTemplateCollectionEntryUri(templateCollectionUri, templateName));
var templateCollectionEntryUri = await templateCollectionEntryUriTask;
var elementModelUriTask = Task.Run(() => GetTemplateElementModelUri(templateCollectionUri, templateName));
var elementModelUri = await elementModelUriTask;
await Task.Run(() => PrintVdfModel(elementModelUri));
string[] links = new string[2] { templateCollectionEntryUri, elementModelUri };
d.Add(templateName, links);
}
return d;
}
或者您可以使用addValueEventListener并获取任何更改的数据。我真的不认为ChildEventListener是从Firebase检索数据的好主意。
答案 2 :(得分:0)
问题是,您在onChildAdded()
中获得的内容并不是您期望的完整Product对象。
在您的数据库参考中,您使用("parts/"+curP)
定位特定产品ChildEventListener
。特定产品节点的子节点为name
,loc
和sloc
,因此onChildAdded()
将触发多次,为您提供{{1}这些属性分开。
您可能用于获取整个Product对象的两种模式是:
dataSnapshot
条目。