2017-01-24 43 views
0

我有我的主窗口的AsyncTask列表視圖

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

一個ListView和我asyntask我想從我的數據庫獲取數據,並在我的列表視圖推。當我執行我的代碼時,我的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); 
} 
相關問題