【问题标题】:Firebase Data Retrieval (Random key)Firebase 数据检索(随机键)
【发布时间】:2018-09-10 04:18:04
【问题描述】:

这里我只是从 Firebase 中检索数据并打印在 (Log) 中。我需要在Listview 或RecyclerView 中显示。我参考了很多网站、博客、视频等,但仍然没有找到合适的解决方案。

打印的 LOG 屏幕截图:

Firebase 结构:

Problem video link

我需要解决方案或适当的网站来解决此问题。

任何帮助将不胜感激。

【问题讨论】:

  • 您想显示员工列表或访问特定员工填写表格的数据表格?

标签: java android listview firebase firebase-realtime-database


【解决方案1】:

您需要获取员工个人详细信息的数据。数据是一个字符串,并在下面的代码中传递:

    JSONObject json = new JSONObject(data);
    Iterator<?> keys = json.keys();
    while(keys.hasNext())
    {
        String key = (String)keys.next();
        JSONObject jsonItem = json.getJSONObject(key);

    }

您将拥有每个项目的 jsonobject。

【讨论】:

    【解决方案2】:

    您需要为您的DataSnapshot 创建模型类,以便您可以像这样使用。

    模型类:

    import com.google.firebase.database.PropertyName;
    
    /**
    * Created on 31/3/18.
    */
    public class Employee {
    
    @PropertyName("Employee Address")
    public long emplyeeAddress;
    @PropertyName("Employee Age")
    public long emplyeeAge;
    @PropertyName("Employee Blood Group")
    public long emplyeeBloodGroup;
    @PropertyName("Employee Date of joining")
    public long emplyeeDOJ;
    @PropertyName("Employee Gender")
    public long emplyeeGender;
    @PropertyName("Employee ID")
    public long emplyeeId;
    @PropertyName("Employee Married Status")
    public long emplyeeMarriedStatus;
    @PropertyName("Employee Name")
    public long emplyeeName;
    @PropertyName("Employee Phone Number")
    public long emplyeePhoneNumber;
    @PropertyName("Employee Qualification")
    public long emplyeeQualification;
    
    String key;
    
    public String getKey() {
        return key;
    }
    
    public void setKey(String key) {
        this.key = key;
    }
    
    @PropertyName("Employee Address")
    public long getEmplyeeAddress() {
        return emplyeeAddress;
    }
    
    @PropertyName("Employee Address")
    public void setEmplyeeAddress(long emplyeeAddress) {
        this.emplyeeAddress = emplyeeAddress;
    }
    
    @PropertyName("Employee Age")
    public long getEmplyeeAge() {
        return emplyeeAge;
    }
    
    @PropertyName("Employee Age")
    public void setEmplyeeAge(long emplyeeAge) {
        this.emplyeeAge = emplyeeAge;
    }
    
    @PropertyName("Employee Blood Group")
    public long getEmplyeeBloodGroup() {
        return emplyeeBloodGroup;
    }
    
    @PropertyName("Employee Blood Group")
    public void setEmplyeeBloodGroup(long emplyeeBloodGroup) {
        this.emplyeeBloodGroup = emplyeeBloodGroup;
    }
    
    @PropertyName("Employee Date of joining")
    public long getEmplyeeDOJ() {
        return emplyeeDOJ;
    }
    
    @PropertyName("Employee Date of joining")
    public void setEmplyeeDOJ(long emplyeeDOJ) {
        this.emplyeeDOJ = emplyeeDOJ;
    }
    
    @PropertyName("Employee Gender")
    public long getEmplyeeGender() {
        return emplyeeGender;
    }
    
    @PropertyName("Employee Gender")
    public void setEmplyeeGender(long emplyeeGender) {
        this.emplyeeGender = emplyeeGender;
    }
    
    @PropertyName("Employee ID")
    public long getEmplyeeId() {
        return emplyeeId;
    }
    
    @PropertyName("Employee ID")
    public void setEmplyeeId(long emplyeeId) {
        this.emplyeeId = emplyeeId;
    }
    
    @PropertyName("Employee Married Status")
    public long getEmplyeeMarriedStatus() {
        return emplyeeMarriedStatus;
    }
    
    @PropertyName("Employee Married Status")
    public void setEmplyeeMarriedStatus(long emplyeeMarriedStatus) {
        this.emplyeeMarriedStatus = emplyeeMarriedStatus;
    }
    
    @PropertyName("Employee Name")
    public long getEmplyeeName() {
        return emplyeeName;
    }
    
    @PropertyName("Employee Name")
    public void setEmplyeeName(long emplyeeName) {
        this.emplyeeName = emplyeeName;
    }
    
    @PropertyName("Employee Phone Number")
    public long getEmplyeePhoneNumber() {
        return emplyeePhoneNumber;
    }
    
    @PropertyName("Employee Phone Number")
    public void setEmplyeePhoneNumber(long emplyeePhoneNumber) {
        this.emplyeePhoneNumber = emplyeePhoneNumber;
    }
    
    @PropertyName("Employee Qualification")
    public long getEmplyeeQualification() {
        return emplyeeQualification;
    }
    
    @PropertyName("Employee Qualification")
    public void setEmplyeeQualification(long emplyeeQualification) {
        this.emplyeeQualification = emplyeeQualification;
    }
    }
    

    值监听器:

    private ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot data) {
    
            List<Employee> employees = new ArrayList<>();
    
            if (data != null && data.getValue() != null && data.getChildrenCount() > 0) {
    
                for (DataSnapshot snapShot : data.getChildren()) {
    
                    Employee emplyess = snapShot.getValue(Employee.class);
                    emplyess.setKey(snapShot.getKey());
                }
    
            }
            //set your list to adapter
    
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
    
        }
    };
    

    希望对你有帮助:-)

    注意:可能是我在员工属性名称中犯了一些拼写错误,所以请仔细检查

    【讨论】:

      【解决方案3】:

      以下是使用ArrayAdapter 在ListView 中显示员工姓名的方法:

      DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
      DatabaseReference ref = rootRef.child("Employee personal detail");
      ValueEventListener valueEventListener = new ValueEventListener() {
          @Override
          public void onDataChange(DataSnapshot dataSnapshot) {
              List<String> list = new ArrayList<>();
              for(DataSnapshot ds : dataSnapshot.getChildren()) {
                  String employeeName = ds.child("Employee Name").getValue(String.class);
                  list.add(employeeName);
              }
              ListView listView = (ListView) findViewById(R.id.list_view);
              ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list);
              listView.setAdapter(arrayAdapter);
          }
      
          @Override
          public void onCancelled(DatabaseError databaseError) {}
      };
      ref.addListenerForSingleValueEvent(valueEventListener);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 2018-08-25
        • 1970-01-01
        相关资源
        最近更新 更多