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

时间:2011-03-11 05:41:43

标签: android sqlite android-listview

遵循我的代码,从数据库向listview显示数据。但是它不起作用并使我的应用程序崩溃。请为我的这个问题提供完美的解决方案。

我的代码......

        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();
            }

    }

2 个答案:

答案 0 :(得分:2)

        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美元......

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

  • 为什么每次迭代都会调用moveToFirst?它对你有用吗?
  • 为什么要关闭for?
  • 中的光标
  • 为什么要在每次迭代时设置适配器?
  • 为什么使用数组适配器而不是CursorAdapter

答案 1 :(得分:1)

请尝试以下代码

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();
    }