也许是一个令人困惑的标题,但我会尽力解释。 在创建某个片段时,我想将firebase中“scriptURL”子项的值加载到TextView字段中。 在创建片段时,“scriptURL”子节点的“兄弟”的值由args携带到片段中。
我的firebase结构是这样的:
root
-scripts
--UID
---scripttitle:"title"
---scripturl:"url"
--UID
---scripttitle:"title"
---scripturl:"url"
当片段被加载时,我在字符串中有“scripttitle”的值。 我想用它来获得相应的scripturl,但是无法弄清楚如何做到这一点。
我片段的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Bundle args = this.getArguments();
String clickedScript = args.getString("clickedScript", null);
RelativeLayout llLayout = (RelativeLayout) inflater.inflate(R.layout.fragment_script_details, container, false);
final TextView clicked = (TextView)llLayout.findViewById(R.id.scriptTitle);
final TextView url = (TextView)llLayout.findViewById(R.id.textView7);
clicked.setText(clickedScript);
Firebase ref = new Firebase("http://theatre-assistant.firebaseio.com/scripts").child(clickedScript);
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
url.setText((String) snapshot.child("scripturl").getValue());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
return llLayout;
}
这样,文本字段结束为空白。我相信我的firebase ref已经过了,但这是我唯一能想到的。 希望这是有道理的,有人可以指出我正确的方向来完成这项工作。 我是新手,所以我可能会想到这里。
答案 0 :(得分:1)
您无法像这样加载脚本:
Firebase ref = new Firebase("http://theatre-assistant.firebaseio.com/scripts")
.child(clickedScript);
ref.addValueEventListener(new ValueEventListener() {
child()
方法引用其键值为clickedScript
的子项。这样的孩子不存在。
相反,您正在寻找执行查询:
Firebase ref = new Firebase("http://theatre-assistant.firebaseio.com/scripts");
Query query = ref.orderByChild("scripttitle").equalTo(clickedScript);
query.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot child: snapshot.getChildren()) {
url.setText((String) child.child("scripturl").getValue());
}
}
for循环是必要的,因为查询可以匹配任意数量的子节点,因此它返回一个列表。即使只有一个匹配的孩子(就像你期望的那样),它也会返回一个长度为一的列表。
除此之外,Firebase guide on querying data还涵盖了查询。