【发布时间】:2016-06-21 11:35:10
【问题描述】:
我想用从 DB 异步检索的数据填充 listView, 问题是,如果我设置适配器,它会抛出空指针,因为数据尚未到达,当我收到数据时执行一个方法,那么我可以在这个方法中调用什么来填充我的列表视图?我尝试将布局传递给此类以在收到数据但不起作用时直接填充列表视图(没有发生任何事情)
我认为使用 AsyncTask 添加 wait() 是一个好主意,当这个“检索数据方法”被触发时调用 notify() 但我不知道如何从另一个类的 asynctask 调用 notify()...
我也不确定 asynktask 是否是最好的方法,有什么想法吗? 如果有帮助,我正在使用 retrofit2
listview 创建/填充代码
private List<TmOfsDTO> prepareList() {
List<TmOfsDTO> list;
try {
// Create list of items
ListObtainer listObtainer = new ListObtainer(this);
list = listObtainer.getTmOfsDTOList(user); // this method returns list of objects from DB
} catch (Exception e) {
list = null;
e.printStackTrace();
}
return list;
}
private void populateListView(List<TmOfsDTO> lista) {
// Build Adapter
OrderAdapter orderAdapter = new OrderAdapter(this, 0, lista);
// orderAdapter.getView()
Log.d("LSO", ".....");
// Configure listview
//View rootView = View.inflate(this, R.layout.activity_ordenes, null);
ListView listView = (ListView) findViewById(R.id.lvOrdenes);
listView.setAdapter(orderAdapter);
//listView.invalidateViews();
//listView.refreshDrawableState();
Log.d("LSO", ".......");
最后更新:
**
当我接收数据时,我正在做正确的通知,将适配器传递给类并调用:
orderAdapter.notifyDataSetChanged();
但问题是我错过了添加每个项目: orderAdapter.add(orden);
在通知之前,现在似乎工作得很好**
【问题讨论】:
-
加载器,了解加载器框架
-
" 问题在于,如果我设置了适配器,它会抛出空指针,因为数据还没有到达”——这部分听起来很可疑。如果您有一个有效的适配器,则数据是否已到达无关紧要(在将数据添加到适配器之前,它应该在列表中不显示任何内容)
-
能否请您通过相关的logcat部分?那么匹配的代码呢?
标签: android multithreading listview asynchronous retrofit