Android Spinner中的Firebase数据

时间:2018-03-30 14:17:13

标签: java android firebase firebase-realtime-database

这是上一篇文章的后续内容,我仍然遇到一些问题 - 请参阅原帖:Populating Android spinner with Firebase Data

我修改了Firebase规则,以便为每个用户实现基于用户的身份验证。我已经成功实现了这个,但是仍然存在一个问题 - 我的MaintenanceActivity中的微调器不再填充来自我数据库中propertyAddress节点的properties属性。

我当前的安全设置非常适合添加,删除和更新记录,但是,它似乎不会使用propertyAddress填充微调器。

以下是我的安全规则:

    {
  "rules": {
    "maintenance" : {
      "$uid" : {
    ".read": "$uid === auth.uid",
    ".write": "$uid === auth.uid"
  }
},
    "properties" : {
     "$uid" : {
    ".read": "$uid === auth.uid",
    ".write": "$uid === auth.uid"
    }
}
}
}

MaintenanceActivity的代码摘录,我希望它会填充微调器:

fDatabaseRoot.child("properties").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                final List<String> propertyAddressList = new ArrayList<String>();

                for (DataSnapshot addressSnapshot: dataSnapshot.getChildren()) {
                    String propertyAddress = addressSnapshot.child("propertyAddress").getValue(String.class);
                    if (propertyAddress!=null){
                        propertyAddressList.add(propertyAddress);
                    }
                }

                Spinner spinnerProperty = (Spinner) findViewById(R.id.spinnerProperty);
                ArrayAdapter<String> addressAdapter = new ArrayAdapter<String>(MaintenanceActivity.this, android.R.layout.simple_spinner_item, propertyAddressList);
                addressAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinnerProperty.setAdapter(addressAdapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

为进一步说明,这是我的数据结构

Data Structure

1 个答案:

答案 0 :(得分:1)

properties节点下,您有两个ID,第一个是userid,第二个是push()方法生成的随机ID。

为了能够访问您需要获取userid的属性地址,然后使用for(DataSnapshot addressSnapshot: dataSnapshot.getChildren()) {,您将在随机ID内迭代并获取其中的属性。

所以改变这个:

fDatabaseRoot.child("properties").addListenerForSingleValueEvent(new ValueEventListener() {

到此:

FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
String userid=user.getUid();
fDatabaseRoot.child("properties").child(userid).addListenerForSingleValueEvent(new ValueEventListener() {