从 SQLite 填充 Listview 时我的代码有什么问题?

发布于 2024-10-21 13:02:53 字数 812 浏览 1 评论 0原文

以下是我的代码,用于将数据库中的数据显示到列表视图。但它不会工作并使我的应用程序崩溃。请为我的这个问题提供完美的解决方案。

我的代码......

        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.deletestudent);
           // DisplayStudent();


        ArrayList<String > arrlst=new ArrayList<String>();
         ListView lst_stu=(ListView) findViewById(R.id.ListView01);

            db.open();
            Cursor cur=db.GetStudent();

            for (int i=0;i<cur.getCount();i++)
            {
                cur.moveToFirst();

                String stunm=cur.getString(1);
                arrlst.add(1, stunm);
                lst_stu.setAdapter((ListAdapter) arrlst);

                 db.close();
            }

    }

Following s my Code to display data to listview from database. But it will not work and crash my application.please Give perfect solution for my this problem.

My Code......

        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.deletestudent);
           // DisplayStudent();


        ArrayList<String > arrlst=new ArrayList<String>();
         ListView lst_stu=(ListView) findViewById(R.id.ListView01);

            db.open();
            Cursor cur=db.GetStudent();

            for (int i=0;i<cur.getCount();i++)
            {
                cur.moveToFirst();

                String stunm=cur.getString(1);
                arrlst.add(1, stunm);
                lst_stu.setAdapter((ListAdapter) arrlst);

                 db.close();
            }

    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柠北森屋 2024-10-28 13:02:53
        for (int i=0;i<cur.getCount();i++)
        {
            cur.moveToFirst();

            String stunm=cur.getString(1);
            arrlst.add(1, stunm);
            lst_stu.setAdapter((ListAdapter) arrlst);

             db.close();
        }

问题是您在第一次迭代中关闭了游标。

<块引用>

为我的这个问题提供完美的解决方案。

你看起来像我的老板,只不过他每小时支付 20 美元......

无论如何,你的代码中有很多不好的东西,主要是因为你不明白游标是如何工作的:

  • 为什么你调用 <每次迭代时 code>moveToFirst ?这对你有意义吗?
  • 为什么要在for中关闭光标?
  • 为什么要在每次迭代时设置适配器?
  • 为什么使用数组适配器而不是 CursorAdapter?
        for (int i=0;i<cur.getCount();i++)
        {
            cur.moveToFirst();

            String stunm=cur.getString(1);
            arrlst.add(1, stunm);
            lst_stu.setAdapter((ListAdapter) arrlst);

             db.close();
        }

The problem is that you are closing the cursor in the first iteration.

Give perfect solution for my this problem.

You look like my boss, excepts that he pays 20 dollars per hour....

Whatever, there are a lot of things which are bad in your code, mostly because you don't understand how a cursor works:

  • Why do you call moveToFirst on each iteration? Does it make sens for you?
  • Why do you close the cursor inside the for?
  • Why do you set the adapter on each iteration?
  • Why do you use an array adapter instead of CursorAdapter?
小梨窩很甜 2024-10-28 13:02:53

请尝试下面的代码

try
    {
        Cursor cursor = null;

        db.OpenDatabase();
        cursor = db.GetStudent();

        // Here if condition check wheather the cursor returns record or not.
        // If cursor has some records then it will return non zero number .

        if (cursor.getCount() != 0) 
        {
            // Here if condition check wheather the cursor move to first record or not
            // If it moves to first record then it will return true.
            if (cursor.moveToFirst()) 
            {
                do 
                {
                    arrlst.add(cursor.getInt(cursor.getColumnIndex("your_field_in_database")).trim());

                }while (cursor.moveToNext());
            }
        }

        cursor.close();
        db.closeDatabase();
        lst_stu.setAdapter((ListAdapter) arrlst);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

Please Try Below Code

try
    {
        Cursor cursor = null;

        db.OpenDatabase();
        cursor = db.GetStudent();

        // Here if condition check wheather the cursor returns record or not.
        // If cursor has some records then it will return non zero number .

        if (cursor.getCount() != 0) 
        {
            // Here if condition check wheather the cursor move to first record or not
            // If it moves to first record then it will return true.
            if (cursor.moveToFirst()) 
            {
                do 
                {
                    arrlst.add(cursor.getInt(cursor.getColumnIndex("your_field_in_database")).trim());

                }while (cursor.moveToNext());
            }
        }

        cursor.close();
        db.closeDatabase();
        lst_stu.setAdapter((ListAdapter) arrlst);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文