代码之家  ›  专栏  ›  技术社区  ›  Janith Warnamana

从firebase数据库检索数据到getvalue中的listview null

  •  0
  • Janith Warnamana  · 技术社区  · 7 年前

    我是android studio的新手,我在代码中遇到了一个错误,我试图显示firebase数据库中一些项目的列表视图。但是,它在我的getvalue函数中显示null。请帮忙。

    主要活动

    public class MainActivity extends AppCompatActivity {
    
    DatabaseReference database;
    
    List<Users> usersList;
    
    ListView lister;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        lister = (ListView) findViewById(R.id.loglist);
    
        database = FirebaseDatabase.getInstance().getReference("Activity Log");
    
        usersList = new ArrayList<>();
    
    }
    
    @Override
    protected void onStart() {
        super.onStart();
    
        database.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
    
                usersList.clear();
    
                for (DataSnapshot usersnapshot : dataSnapshot.getChildren()) {
                    Users users = dataSnapshot.getValue(Users.class);
    
                    usersList.add(users);
                }
    
                LogDetails adapter = new 
     LogDetails(MainActivity.this,usersList);
                lister.setAdapter(adapter);
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });
       }
     }
    

    日志详细信息类

    public class LogDetails extends ArrayAdapter<Users> {
    
        private Activity context;
    
        private List<Users> usersList;
    
        public LogDetails (Activity context,List<Users> usersList){
            super(context,R.layout.listview,usersList );
            this.context=context;
            this.usersList=usersList;
        }
    
    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
    
        View viewer = inflater.inflate(R.layout.listview,null,true);
    
        TextView text = (TextView) viewer.findViewById(R.id.text);
    
        Users users = usersList.get(position);
    
        text.setText(users.getUsername()+" unlocked the door at "+users.getUnlocktime());
    
    
    
        return viewer;
      }
    }
    

    用户类

    public class Users {
    
    String locktime;
    String unlocktime;
    String username;
    
    public Users(){
    
    }
    
    public Users(String locktime,String unlocktime,String username){
        this.locktime=locktime;
        this.unlocktime=unlocktime;
        this.username=username;
    
    }
    
    public String getLocktime() {
        return locktime;
    }
    
    public String getUnlocktime() {
        return unlocktime;
    }
    
    public String getUsername() {
        return username;
      }
    }
    

    我的数据库有一个名为ActivityLog的根,它有三个子节点,每个子节点有三个节点。感谢您的帮助

    database layout

    1 回复  |  直到 7 年前
        1
  •  1
  •   Levi Moreira    7 年前

    Firebase需要公共setter来填充对象的属性。在POJO中添加setter:

    public class User {
        private String locktime;
        private String unlocktime;
        private String username;
    
        public String getLocktime() {
            return locktime;
        }
    
        public void setLocktime(String locktime) {
            this.locktime = locktime;
        }
    
        public String getUnlocktime() {
            return unlocktime;
        }
    
        public void setUnlocktime(String unlocktime) {
            this.unlocktime = unlocktime;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    }