2017-01-24 4 views
0

У меня есть ListView на моем MainWindowAsyncTask ListView

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

и с моей asyntask я хочу получить данные из моей БД и толкать его в моей ListView. Когда я выполняю свой код, мой lsitview пуст. Кто-то знает решение для этого?

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

показать мне свои getTasks() метамфетамин od –

+0

ОК я отредактировал – nodeMan

ответ

1

Обновить Ваше ListView «ы адаптер после завершения AsyncTask

@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(); 
} 

Проверить это reference link

1
@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); 
} 
Смежные вопросы