有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是将Android游标(sqlite)提取到数组中以在AlertDialog中使用的最有效的方法。建设者

我想知道从安卓 SQLite数据库游标中提取数据到数组中的最有效方法。 问题是当我使用列表对话框(AlertDialog.Builder.setItems)时,项目是set from an array。要生成数组,我需要遍历光标的每一行,并根据这些值重新生成新的数组,并且需要非常长的时间来处理

<>也许我错过了一些类似C++的STD::向量或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();
                }
            }
    );

共 (1) 个答案

  1. # 1 楼答案

    对于寻找解决方案的人来说,简单的解决方案是使用ArrayList并将其转换为数组。它比为每行光标读取生成新数组快得多

    //  Draw all list of base account
        SQLiteDatabase db = openOrCreateDatabase(getResources().getString(R.string.databasename),MODE_PRIVATE,null);
        Cursor dbv_accounts = db.rawQuery("SELECT * FROM accounts WHERE type='BASE'",null);
        //  Make ArrayList and push every needed row value
        ArrayList<CharSequence> ALaccounts_list = new ArrayList<CharSequence>();
        while (dbv_accounts.moveToNext())
        {
            String row = dbv_accounts.getString(dbv_accounts.getColumnIndex("name"));
            ALaccounts_list.add(row);
        }
        db.close();
    

    然后将ArrayList转换为一个数组

      CharSequence[] accounts_list = new CharSequence[ALaccounts_list.size()];
      accounts_list = ALaccounts_list.toArray(accounts_list);
      final CharSequence[] finalAccounts_list = accounts_list; 
    

    阵列已准备好在AlertDialog中使用。建设者设置项