4

私の問題は、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);

    }

   }    
  }
4

2 に答える 2

1

あなたはまだStringあまり良くなく効率的ではない新しいものを作成しているので、これがあなたが最後の行しかない理由です。

つまり、これを行うには、

->行を取得->文字列にデータを追加->setText-
>次の行を取得->文字列にデータを追加->setText...-
>
最後の行を取得->文字列にデータを追加->setText

これはあまり良くありません。もしあなたがミリオンの列を持っていたら、TABLEミリオンを作るでしょう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());

今、それは望ましい仕事をします。

于 2012-07-04T14:58:06.773 に答える
1

私は(他の回答で明らかにされた理由で)使用します

tv.append(p.toString());

TextViewはテキストをすでに内部に保持しているためです。

TextView.append()を参照してください。

于 2012-07-04T16:18:06.813 に答える