次のコードで作成されたSQLテーブルがあります。
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + SUBJECT
+ " TEXT NOT NULL," + TOPIC + " TEXT NOT NULL, "
+ LECTURENUMBER + " TEXT NOT NULL, " + PAGENUMBER
+ " TEXT NOT NULL, " + DATE + " TEXT NOT NULL, " + _DATA
+ " TEXT NOT NULL);");
}
次のようにテーブルをクエリします。
String sql = "SELECT " + _ID + "," + SUBJECT + " FROM " + TABLE_NAME
+ " GROUP BY " + SUBJECT + ";";
Cursor cursor = subjects.getReadableDatabase().rawQuery(sql, null);
問題は、カーソルが空の場合(つまりテーブルに値が格納されていない場合)アクティビティAを開始し、カーソルが空でない場合(つまりテーブルがいっぱい)にアクティビティBを開始する必要があることです。
テーブルが空かどうかを教えてくれるメソッドを見つけることができません。次のようにログを使用しようとしました:
private void showSubjectsOnList() {
String sql = "SELECT " + _ID + "," + SUBJECT + " FROM " + TABLE_NAME
+ " GROUP BY " + SUBJECT + ";";
Cursor cursor = subjects.getReadableDatabase().rawQuery(sql, null);
Log.d("Events",Integer.toString(cursor.getCount()));
if(cursor.isNull(0)!=false){
cursor.close();
subjects.close();
startActivity(new Intent(this,OpenScreen.class));
}
}
ただし、テーブルが空の場合はLOGに1が表示され、テーブルに1つのエントリがある場合は1が表示されます。テーブルに2つのエントリがある場合は2が表示されます。
カーソルが空かどうかに基づいて異なるアクティビティを開始するという私の問題を解決する方法を提案できますか。
次のようにカーソルをテストしてから、あなたが言ったことをするのはどうですか:
if(cursor!=null && cursor.getCount()>0)
getCount()
カーソルの行数を返します
http://developer.Android.com/reference/Android/database/Cursor.html#getCount()
空のカーソルをテストする最も簡単でクリーンな方法は、次のコードです。
if ( cursor.moveToFirst() ) {
// start activity a
} else {
// start activity b
}
ドキュメントによると、カーソルが空の場合、メソッドはfalseを返します。
http://developer.Android.com/reference/Android/database/Cursor.html#moveToFirst%28%29
public abstract boolean moveToFirst()
APIレベル1で追加カーソルを最初の行に移動します。
このメソッドは、カーソルが空の場合にfalseを返します。
移動が成功したかどうかを返します。
削除されたレコードはSQLiteにNULLレコードとして残りますが、getCount()
はNULLレコードのみをカウントしません。テーブルにnullのレコードがある場合、nullでないレコードの一部には、getCount()
の結果よりも大きい__Id
_番号が含まれます。それらに到達するには、カーソルを(for()ループを使用して)getCount()
の結果の2倍の回数繰り返し、カーソルを使用してrecord_Id番号を配列に入力します。結果の配列が_{ 1, 2, 5, 6, 7, 8, 9, 11, 12, 14 }
_であるとしましょう。
つまり、レコード3、4、10、13はNULLレコードであり、テーブルにはgetCount()
から取得した10レコードではなく、14レコードがすべて含まれています。
覚えておいてください:
getCount()
は、nullでないレコードの数を返します。_Id
_の非NULLレコードの数を返します。_Id
_番号は、nullレコードの__Id
_番号です。getCount()
よりも十分に遠くに到達する必要があります。GetCount()を使用するだけです。 SQLは正しいが、行を返さない場合、NOT NULLカーソルオブジェクトがありますが、行はなく、getCount()は0を返します。
問題は、適切なクエリを作成していないことだと思います。
SQLiteDatabaseクエリを使用する必要があります。
Cursor c = db.query(TABLE_NAME, null,
null, null, null, null, null);
その後、c.getCount()を使用して、テーブルに何かがあるかどうかを判別できます。
私の提案は、 ListActivity
を使用することです。
これらは、ListView
のアイテムを表示するためのアクティビティです。単純に SimpleCursorAdapter
を使用して、それらにデータを入力できます(ListActivity
s JavaDocページにも示されています)。
また、 setEmptyView()
- method も提供します。これは、View
(TextView
の場合があります)を表示するために使用できます。 1。
その方法の例は here にあります。