【发布时间】:2015-08-02 07:31:26
【问题描述】:
我想知道从 android SQLite 数据库游标中提取数据到数组中的最有效方法。 问题是当我使用列表对话框(AlertDialog.Builder.setItems)时,项目是set from an array。要生成数组,我需要遍历光标的每一行并根据值重新生成新数组,并且需要 非常长 时间来处理。
也许我遗漏了诸如 c++ std::vector 或 python 的列表之类的东西,我可以在其中快速推送/追加和弹出。我想知道人们如何处理从数据库中获取数据并保持快速处理的列表对话框。谢谢
//-- Draw all list of base account
dbv_accounts = db.rawQuery("SELECT * FROM accounts WHERE type='BASE'",null);
CharSequence[] accounts_list = {};
if (dbv_accounts.getCount()>0)
while (dbv_accounts.moveToNext()) //-- cursor starts from -1
{
CharSequence[] new_accountl = new CharSequence[accounts_list.length + 1];
System.arraycopy(accounts_list, 0, new_accountl, 0, accounts_list.length);
new_accountl[accounts_list.length] = dbv_accounts.getString(dbv_accounts.getColumnIndex("name"));
accounts_list = new_accountl;
}
db.close();
final CharSequence[] finalAccounts_list = accounts_list;
bt_Cba_Baseaccount.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(ChangebaseaccountActivity.this);
builder.setTitle("Pick Base Account Name");
builder.setItems(
finalAccounts_list,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item){
bt_Cba_Baseaccount.setText(finalAccounts_list[item]);
String ba = finalAccounts_list[item].toString();
}
}
);
builder.show();
}
}
);
【问题讨论】:
标签: java android arrays performance sqlite