如何使用SQLite将整个数据库表数据显示到android中的TextView中

时间:2012-07-04 14:52:24

标签: android sqlite

我的问题是,TextView中显示的唯一数据是最后一行 桌子。

所以这是我从数据库表中获取整个数据的代码:

public List<Person> getAllPerson()
{
    List<Person> personList = new ArrayList<Person>();

    //select query
    String selectQuery = "SELECT  * FROM " + DATABASE_TABLE;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);


    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext())
    {
         Person person = new Person();
            person.setId(Integer.parseInt(cursor.getString(0)));
            person.setName(cursor.getString(1));
            person.setHotness(cursor.getString(2));
            person.setAge(Integer.parseInt(cursor.getString(3)));

            // Adding person to list
            personList.add(person);
    }

    return personList;

}

这是我将表数据显示到TextView中的代码:

  public class SQLiteView extends Activity
  {

private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sqlview);
    tv = (TextView) findViewById(R.id.tvDBdisplay);

    DbHelper d = new DbHelper(this);

    List<Person> person = d.getAllPerson();

    for (Person p: person)
    {
        String data =p.getId() + " " + p.getName() + " " + p.getHotness() +      " " + p.getAge();
        tv.setText(data);

    }

   }    
  }

2 个答案:

答案 0 :(得分:1)

因为你仍然在创建一个不是很好而且效率很高的新String,这就是你只有最后一行的原因。

所以你这样做:

- &GT; 获取行 - &gt;将数据添加到String - &gt;的setText
- &GT; 获取下一行 - &gt;将数据添加到String - &gt;的setText
...
- &GT; 获取最后一行 - &gt;将数据添加到String - &gt;的setText

这不是很好。如果你在TABLE中有milion行,你会创建milion String instances,这不是很好,不是吗?不要忘记String 不可变 ,这种工作非常广泛,所以在类似的情况下你需要使用StringBuilder有一些方法可以提供出色的工作,并且对String有良好的表现。

StringBuilder builder = new StringBuilder();
for (Person p: person) {
   builder.append(p.getId() + " "
     + p.getName() + " " + p.getHotness() + " " + p.getAge());
}
tv.setText(builder.toString());

现在它已经成功了。

答案 1 :(得分:1)

我会使用(出于其他答案中暴露的原因)

tv.append(p.toString());

因为TextView已在内部保留文本。

请参阅TextView.append()