获取一列SQLite DB到ListView无法在Android中运行

时间:2014-04-11 08:05:56

标签: java android sqlite listview

我试图检索一个列(保存名称的数据库列)并将它们放到列表视图中。我有一个名为Data with" getters"和" setters"。

以下代码放在扩展SQLiteOpenHelper的DBHandler类中。此代码从MainActivity.java调用,其中listview旨在使用onClickButton事件进行更新。

public String[] getNames (int a, int b) { 

        String[] names = new String[] {};

        String selectQuery = "SELECT * FROM " + TABLE_NAME 
                + " WHERE " + KEY_ONE + " = ? AND " + KEY_TWO + " = ?";


        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, new String[]{String.valueOf(a), String.valueOf(b)});

        if (cursor.moveToFirst()) {

            int i = 0;

            do {
                Data myData = new Data();

                names [i] = cursor.getString(1); //Names in cursor

                ++i;

            } while (cursor.moveToNext());

        }
        return names;
    }

在MainActivity.java中,我在更新并通知listview适配器的更新之前调用以下代码:

values = db.getNames (1, 1);

我不知道为什么但这不起作用,当我点击按钮进入onClickButton时,它会抛出很多字符串长度的错误并使应用程序崩溃。

由于

3 个答案:

答案 0 :(得分:1)

按照 laalto 回答,最后将ArrayList转换为Array,如下所示:

String[] arrRecords = names.toArray(new String[names.size()]);

答案 1 :(得分:0)

String[] names = new String[] {};

...

names [i] = cursor.getString(1); //Names in cursor

您正在分配一个导致ArrayIndexOutOfBoundsException的空数组。

考虑使用ArrayList之类的列表,您可以在其中附加您的值,例如

List<String> names = new ArrayList<String>();

...

names.add(cursor.getString(1));

如果您确实需要返回String[],则可以使用toArray()转换列表:

String[] arr = new String[names.size()];
names.toArray(arr);
return arr;

此外,在发布涉及异常的问题时,请始终在问题本身中包含来自logcat的异常堆栈跟踪。

答案 2 :(得分:0)

为什么要这样使用

 String[] names = new String[] {}; //no size

 names [i] = cursor.getString(1); //it can work?

使用ArrayList<String>

List<String> names = new ArrayList<String>(); //declare

names.add(<column-val>);  //add column value to list