2017-01-23 1 views
0

db에서 데이터를 검색하고 목록 뷰로 푸시하려면 어떻게해야합니까? 이것에 대해 asynctask를 사용하고 싶습니다.업데이트 ListView 프로세스에서 AsyncTask 오류가 발생했습니다.

이 코드를 사용했지만이 앱을 실행할 때마다 내 앱이 끊어졌습니다. idk 왜 데이터를 내 DB로 푸시하면 제대로 작동하기 때문에. 하지만 그때 내가 오류를 얻을 검색 할 수 있습니다. 뷰를 수정하는 동안 UI 스레드에서하지 않기 때문에

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

충돌을 일으킨 예외의 스택 추적을 제공 할 수 있습니까? –

답변

1

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

그건 시도

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

}. 그래서 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

관련 문제