在将数据从SQLite数据库显示到textview时遇到问题

时间:2019-11-03 09:21:17

标签: android sqlite

我正在尝试从SQLite数据库获取数据并从文本视图显示输出。该程序没有崩溃,但我无法显示数据。

正在获取数据,因为它们显示在日志中。

try{
        SQLiteDatabase sqLiteDatabase= this.openOrCreateDatabase("User",MODE_PRIVATE,null);

        sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS users (name VARCHAR,age INT(3))");
        sqLiteDatabase.execSQL("INSERT INTO users (name,age) VALUES ('rob',34)");
        sqLiteDatabase.execSQL("INSERT INTO users (name,age) VALUES ('Souvik',20)");

        Cursor c= sqLiteDatabase.rawQuery("SELECT * FROM users",null);

        int nameIndex=c.getColumnIndex("name");
        int ageIndex=c.getColumnIndex("age");

        c.moveToFirst();


        while (c!=null){
            x.add(c.getString(nameIndex));
            x.add(Integer.toString(c.getInt(ageIndex)));
            Log.i("name",c.getString(nameIndex));
            c.moveToNext();
        }

        txt.setText(x.get(2));


    }catch (Exception e){
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:0)

您编写了一个无休止的while循环,因为c不是,也永远不会是null
删除此行:

c.moveToFirst();

并将循环更改为此:

while (c.moveToNext){
    x.add(c.getString(nameIndex));
    x.add(Integer.toString(c.getInt(ageIndex)));
    Log.i("name",c.getString(nameIndex));
}

我假设x是存储结果的List
因此,循环结束后,您在List中将有4个项目。
在这一行:

txt.setText(x.get(2));

您将TextView的文本设置为List的3d项。
当然,如果创建数据库,创建表并且INSERT语句不失败,这将起作用。
由于您所有的代码都在try/catch块内,因此如果出现问题,该应用程序将不会崩溃。