android - 从 Firebase 数据库 Android 获取密钥
问题描述
我有如下的firebase数据。单击 ListView 时,我想在 textview 中显示键。
我尝试使用以下代码从折扣中获取密钥
private void getKeyValues(){
databaseReference = FirebaseDatabase.getInstance().getReference().child("promotion").child("discount");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
for (DataSnapshot child: dataSnapshot.getChildren()){
//Object object = child.getKey();
labelGetKey.setText(child.getKey());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("Read Fail", "Error");
}
});
}
它正在工作,但只能获得最后一个键并在文本视图中显示。第一个键或其他键没有显示。这是我的列表视图代码
private void retrieveDataShowListView(){
// Array List and Adapter for Message ListView;
final ArrayList<String> arrayList = new ArrayList<>();
final ArrayAdapter<String> adapter;
databaseReference = FirebaseDatabase.getInstance().getReference().child("promotion").child("discount");
adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,arrayList);
listViewPromotion.setAdapter(adapter);
listViewPromotion.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String showValue = String.valueOf(parent.getItemAtPosition(position));
editTextPromotion.setText(showValue);
// Display Key from Database
getKeyValues();
}
});
databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String strLocation = dataSnapshot.getValue(String.class);
arrayList.add(strLocation);
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
String string = dataSnapshot.getValue(String.class);
arrayList.remove(string);
adapter.notifyDataSetChanged();
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
你能帮我看看我的代码有什么错误吗?谢谢!
解决方案
好吧,你要做的只有一件事,
private void getKeyValues(){
databaseReference = FirebaseDatabase.getInstance().getReference().child("promotion").child("discount");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.getKey();
String dataKeys="";
for (DataSnapshot child: dataSnapshot.getChildren()){
//Object object = child.getKey();
dataKeys=dataKeys+child.getKey() + "";
}
labelGetKey.setText(dataKeys);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("Read Fail", "Error");
}
});
}
您的密钥每次在您的 for 循环中都会被覆盖。因此,您必须将每个位置的每个键存储在字符串中并附加它。因此,您将在 String dataKeys 中获得最终的键值。
因此,要获取所选列表视图项目的字符串,您可以通过项目位置获取,例如,如果 position is=2;
所以,你可以这样做,
int counter=0;
for (DataSnapshot child: dataSnapshot.getChildren()){
//Object object = child.getKey();
if(counter==position-1){
dataKeys=child.getKey();
break;
}
counter++;
}
labelGetKey.setText(dataKeys);
通过这种方式,您可以通过传递列表项位置找到所选项目的键。我希望你能明白。......
推荐阅读
- ios - 为什么继承的类不能是json编码
- python - 如何正确重塑张量?
- python - 对嵌套的 for 循环如何同时是 O(n!) 和 O(n^2) 感到困惑
- java - 无法在 Java 7 中添加/更新注解
- express - Redis monitor 命令每秒显示相同的请求
- cron - 每 20 天和星期一运行的 CRON 作业
- django - 单击后如何更新表值
- python - 如何在处理前导零的同时使用python将csv文件作为附件发送
- javascript - 如何连接组合器选择器
- rest - 用于在 Kubernetes 的命名空间(或集群上)中列出 CustomResource 实例的 Kube API