【问题标题】:retrieving data from firebase database to listview null in getvalue从firebase数据库检索数据到getvalue中的listview null
【发布时间】:2018-05-31 23:00:12
【问题描述】:

我是 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) {

        }
    });
   }
 }

LogDetails 类

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 的根,其中包含三个子节点和每个子节点的 3 个节点。任何帮助表示赞赏

database layout

【问题讨论】:

  • 发布你的 logcat。(你从 logcat 得到的错误)
  • 你能发一张你的数据库结构的截图吗?
  • 没有错误。只是“text.setText(users.getUsername()+”这一行在“+users.getUnlocktime());”处解锁了门。返回 "null 在 null 处解锁了门。
  • @LeviAlbuquerque 完成
  • 查看答案:)

标签: android firebase listview firebase-realtime-database


【解决方案1】:

Firebase 需要公共设置器来填充对象的属性。将 setter 添加到您的 POJO:

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;
    }
}

【讨论】:

  • 哇,太奇怪了!尝试将属性设置为私有
  • 我发现了问题,我在快照 for 循环中放置了错误的快照变量。非常业余的错误。非常感谢您的帮助:)
猜你喜欢
  • 2019-05-30
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多