简体   繁体   English

异步任务列表视图

[英]Asynctask listview

I have a listview on my mainwindow 我在主窗口上有一个列表视图

lvItems = (ListView) findViewById(R.id.lvItems);
    new GetAsync(this,lvItems).execute();

and with my asyntask i want retrieve the data from my db and push it in my listview. 和我的异步任务,我想从我的数据库中检索数据,并将其推入我的列表视图。 When i execute my code my lsitview is empty. 当我执行代码时,我的lsitview是空的。 Someone knows the solution for this ? 有人知道解决方案吗?

public class GetAsync extends AsyncTask<Void,ArrayList<Task>,List<Task>> {

private Context context;
private ListView listView;
ArrayAdapter<Task> tasks;

public GetAsync(Context context, ListView listview) {
    this.context = context;
    this.listView = listview;
}


@Override
protected List<Task> doInBackground(Void... voids) {
    TaskDbHelper db = new TaskDbHelper(context);
    return db.getTasks();
}



@Override
protected void onPreExecute() {
    tasks = (ArrayAdapter<Task>) listView.getAdapter();
}

@Override
protected void onPostExecute(List<Task> tasks) {
    tasks.addAll(tasks);
}

} }

public List<Task> getTasks()
{
    SQLiteDatabase db = this.getWritableDatabase();

    String[] columns = new String[] {"id","task","complete"};
    String prderBy = "task ASC";

  //  Cursor cursor = db.query(TaskContract.TaskEntry.TABLE_NAME,columns,null,null,null,null,prderBy,null);
    Cursor cursor = db.rawQuery("select * from task where complete = ?",new String[]{"0"});

    List<Task> tasks = new ArrayList<>();

    while (cursor.moveToNext())
    {
        Task t = new Task(cursor.getInt(0),
                cursor.getString(1)
                ,cursor.getInt(2));
        tasks.add(t);
    }
    cursor.close();

    return tasks;
}

Update your ListView 's adapter after completing the AsyncTask 完成AsyncTask后,更新ListView的适配器

@Override
protected void onPostExecute(List<Task> tasks) {
    tasks.addAll(tasks);
    //Update listview adapter . Which already has the updated items 
    //assuming your listview adapter variable is listViewAdapter
    listViewAdapter.notifyDataSetChanged();
}

Check this reference link 检查此参考链接

@Override
protected void onPostExecute(List<Task> tasks) {
tasks.addAll(tasks);
   ArrayAdapter<Task> adapter = new ArrayAdapter<Task>(this,
      android.R.layout.simple_list_item_1, android.R.id.text1, tasks);

      listView.setAdapter(adapter); 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM