AsyncTaskActivity onPostExecute() 메서드 내부에서 setadapter() 메서드를 호출하는 데 문제가 있습니다. 나는 AsyncTask : http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result에 관한 문서를 읽었지만 그것을 달성하는 방법에 대한 답을 찾지 못했다. 그렇게하기 위해 의도를 사용해야합니까? 나는 안드로이드 개발에 익숙하지 않으므로 어리석은 질문 일 경우 용서해주십시오.AsyncTask에서 UI 스레드 메서드 호출
MainActivity
public class MainActivity extends ListActivity {
private String[] columns = new String[] {"foreign_word", "native_word"};
private int[] target = new int[] { R.id.foreign_word, R.id.native_word };
private Cursor cur = null;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
new AsyncTaskActivity(this).execute();
}
public void setadapter(Cursor cur) {
SimpleCursorAdapter aaa = new SimpleCursorAdapter(this.getApplicationContext(), R.layout.list_entry, cur, columns, target, 0);
this.setListAdapter(aaa);
}
}
AsyncTaskActivity
public class AsyncTaskActivity extends AsyncTask<Void, Void, Cursor> {
Activity activity = null;
private SQLiteDatabase db = null;
private String[] selection = {"_id", "native_word", "foreign_word"};
Cursor cur = null;
public AsyncTaskActivity(Activity activity) {
this.activity = activity;
}
@Override
protected Cursor doInBackground(Void... params) {
DbAdapter mSQLadapter = new DbAdapter(activity);
db = mSQLadapter.getWritableDatabase();
Cursor cur = db.query("words", selection, "foreign_word='car'", null, null, null, null);
return cur;
}
protected void onPostExecute(Cursor cur) {
// I'd like to call setadapter() ,passing it Cursor as a parameter
}
}
AsyncTask를 MainActivity 내부의 내부 클래스가 나를 위해 작동으로하지만, 위의 코드하지 (내는, setAdapter() 메소드는 액세스 할 수 없었습니다) . – Kristopher
@soulreaver mAActivity를 MainActivity의 참조로 선언하는 것을 잊어 버렸기 때문일 수 있습니다. 만약 당신이'Activity' mActivity를했다면'Activity'는'setAdapter()'메소드를 가지지 않고'MainActivity'는 그렇게하지 않기 때문에 메소드를 보지 못했을 것입니다. –