2017-01-23 7 views
0

データベースからデータを取得してリストビューにプッシュするにはどうすればよいですか? これにはasynctaskを使います。更新リストビュープロセスでAsyncTaskエラーが発生しました

私はこのコードを使用していますが、私のアプリはこれを実行するたびに見つけられます。 idkなぜ私は私のデータベースにデータをプッシュするので、正常に動作します。しかし、私はその後、私はエラーが取得取得します。

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

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

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


@Override 
protected String doInBackground(Void... voids) { 
    TaskDbHelper db = new TaskDbHelper(context); 
    tasks.addAll(db.getTasks()); 
    return "werkt"; 
} 



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

@Override 
protected void onPostExecute(String aVoid) { 
    super.onPostExecute(aVoid); 
} 

}

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

クラッシュの原因となった例外のスタックトレースを提供できますか? –

答えて

1

ビューを変更しながら、UIスレッド上にないためです

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() 
     return db.getTasks(); 
    } 



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

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

を試してみてください。だからonPostExecuteのアダプタを更新して、AsyncTaskを起動したスレッド(UIスレッドであると仮定しています)で実行します。

+0

私は正しいと彼はUIを更新していません。彼はリストに追加するだけです。私は間違っている可能性がありますまたUIを更新するが、私は知らない – creativecreatorormaybenot

+0

それは 'notifyDataSetChanged'を呼び出すことができますhttps://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/ArrayAdapter .java#L217これはUIスレッド – Ryan

+0

にある必要があります。また、UIスレッドへの移動について答えたいと思っていましたが、答えは – creativecreatorormaybenot

関連する問題