1

....にデータを入力しようとしていListViewますが、....で使用されているデータベースから 2 つの文字列値を追加できSimpleCursorAdapterません。

コード

ListView.java

public class ListView extends ListActivity {

SQLiteDatabase messagedb;
List<String> senderArray = new ArrayList<String>();
List<String> bodyArray = new ArrayList<String>();

String[] simpleSenderArray = new String[ senderArray.size() ];

String[] simpleBodyArray = new String[ bodyArray.size() ];

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_list);

    senderArray.toArray( simpleSenderArray );
    bodyArray.toArray( simpleBodyArray );

    messagedb=ListView.this.openOrCreateDatabase("message",0, null);

            //This database created already and add sender and body values...here just open that database
    Cursor  cur=messagedb.rawQuery("select sender, body from tab2", null);
    while(cur.moveToNext())
    {
        String sender = cur.getString(cur.getColumnIndex("sender"));
        String body = cur.getString(cur.getColumnIndex("body"));
        senderArray.add(sender);
        bodyArray.add(body);
    }
    cur.close();


    messagedb.close();

     int[] to = new int[] { R.id.sender_entry, R.id.body_entry };

     SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.my_list_entry, cur,simpleSenderArray, to);

     this.setListAdapter(mAdapter);


}

}

my_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

<ListView

    android:id="@android:id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />


</LinearLayout>

my_list_entry.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
<TextView
    android:id="@+id/sender_entry"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="28dip" />
 <TextView
    android:id="@+id/body_entry"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="28dip" />
</LinearLayout>

誰かが私のデータを入力するのを手伝ってくれますListViewか?

4

1 に答える 1

1

既に組み込みのクラス名であるアクティビティListViewに名前を付けました。混乱や名前の競合を防ぐために、一意の名前に変更することを強くお勧めします。

SQLite テーブルでは、_id INTEGER列を として設定する必要がありますPRIMARY KEY。Android では_id、データを ListView、Spinner などにバインドするためにこの列が必要です (技術的には、SQLite3 はこのような列を自動的に作成しますが、定義するのが最善だと思います)。あなた自身。)

    messagedb.execSQL(
        "CREATE TABLE IF NOT EXISTS tab2(" +
        " _id INTEGER PRIMARY KEY," +
        " sender INT(13)," +
        " body varchar)");

コードは次のようになります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_list);

    // Using a SQLiteOpenHelper might be best, but I'll assume that this command works
    messagedb=ListView.this.openOrCreateDatabase("message",0, null);

    Cursor cur = messagedb.rawQuery("select _id, sender, body from tab2", null);
    String[] from = new String[] { "_id", "sender", "body" }
    int[] to = new int[] { R.id.sender_entry, R.id.body_entry };

    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.my_list_entry, cur, from, to);

    this.setListAdapter(mAdapter);
}

SQLiteDatabase.query() メソッドの使用を検討することをお勧めします。その方が少し速いと思います。

Cursor cur = messagedb.query("tab2", new String[] {"_id", "sender", "body"}, null, null, null, null, null);

また、将来のコーディングを容易にするために、すべての列名に静的変数を定義することをお勧めします。

最後に、これは _id 列のないテーブルでも機能するはずですが、これもお勧めしません。

Cursor cur = messagedb.rawQuery("select rowid as _id, sender, body from tab2", null);
于 2012-07-02T16:49:05.887 に答える