从AsyncTaskActivity onPostExecute()方法内部调用setadapter()方法时出现问题。我已阅读关于AsyncTask的文档:http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result),但没有找到答案如何实现这一目标。我应该使用意图来做到这一点吗?我是Android新手,所以请原谅我,如果这是一个愚蠢的问题。从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这可能是因为我忘记宣布mAA作为MainActivity的参考。如果你只是做了Activity,它就不会看到这个方法,因为Activity没有setAdapter()方法,而MainActivity没有。 –