我知道我可以在一个单独的线程中执行我的数据库命令以防止“无响应”(例如带有大量记录的表中的SELECT命令)并将填充的列表传递给主线程。
< / p>
这是一个获取记录的示例,由于记录数量可能需要大约两秒钟,现在我想知道,有没有办法以异步方式从表中获取记录而不是“查询”方法。
public Word[] getWords(int rid) {
Word[] returnVal = null;
db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_WORDS, COLUMNS_WORDS, "RID=?",
new String[] { String.valueOf(rid) }, null, null, null, null);
if (cursor.moveToFirst()) {
returnVal = new Word[cursor.getCount()];
do {
// populate returnVal
} while (cursor.moveToNext());
}
cursor.close();
return returnVal;
}
答案 0 :(得分:3)
使用AsyncTask
类可以执行此操作。创建另一个超出AsyncTask的类,并在重写doInBackground
方法中调用您的方法
class SQLAsyncTaskextends AsyncTask<String, String, String[]> {
@Override
protected String doInBackground(String... urls) {
return getWords(rid); // Pass rid here
}
@Override
protected void onPostExecute(String[] result) {
//Do something with result
}
}