1

这是我的短代码,我在表中插入 10 行,但在完成循环后,为什么我有十次像“0 Net 0”一样的可视化?//表结构

 String creater = "CREATE TABLE IF NOT EXISTS est (ID INTEGER PRIMARY KEY AUTOINCREMENT,codigo VARCHAR(10),"
    + "produto VARCHAR(1000), "
    + "qtd VARCHAR(10) ) ";
    sql.execSQL(creater);

//插入循环

   for(int i=0;i<10;i++)
    {
    ContentValues values=new ContentValues(); 
    values.put("codigo", String.valueOf(i));
    values.put("produto", "Net");
    values.put("qtd", String.valueOf(i));
    sql.insert("est", null, values);
    }

//数组列表

public  ArrayList<String>  estoque(SQLiteDatabase sql)
     {
    ArrayList<String> lst = new ArrayList<String>();
    try{
    String cmd ="select * from est";
    Cursor c = sql.rawQuery(cmd,null);
    c.moveToFirst();
    int i=0;
    while(c.getCount() > i )
    {
    lst.add(c.getString(1)+"|"+c.getString(2)+"|"+c.getString(3));
    i++;
    }
    }catch(Exception ex){Log.e("ERROR", ex.getStackTrace().toString());}
    return lst;
    };

//列表显示

 ListView  listview =(ListView)findViewById(R.id.listview);
ArrayList<String> estoque = new db().estoque(sql);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, estoque);
adapter1.setDropDownViewResource(android.R.layout.simple_list_item_1);
listview.setAdapter(adapter1);

//可视化 "0 Net 0"10 次相同。有什么问题吗请帮忙?

4

1 回答 1

1

在您从数据库读取的 while 循环中(在增加i变量之前或之后),您应该调用c.moveToNext();. 否则,您将一遍又一遍地从同一行读取。

该文档指出:

public abstract boolean moveToNext ()
Move the cursor to the next row.
This method will return false if the cursor is already past the last entry in the result set.

Returns
    whether the move succeeded. 
于 2013-09-24T13:42:08.897 回答