2017-01-24 3 views
0

Ich habe eine Listview auf meinem HauptfensterAsyncTask Listenansicht

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

und mit meinem asyntask mag ich die Daten aus meinem db abrufen und in meiner Listenansicht drücken. Wenn ich meinen Code ausführe, ist meine Sicht leer. Jemand kennt die Lösung dafür?

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

zeigen Sie mir Ihre getTasks() Meth od –

+0

ok ich habe bearbeitet – nodeMan

Antwort

1

Aktualisieren Sie Ihre ListView ‚s-Adapter nach dem 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(); 
} 

prüfen Abschluss dieses 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); 
}