ジャンルに基づいて音楽をクエリしようとしています。そして、それぞれの音楽には異なるジャンルが設定されています。だから私のList<Music> genre
の値はpop, rnb
です。しかし、私はこれで行のデータを取得することができません。私は1つのStringを使ってデータを取得することしかできませんでしたが、List<String>
ではデータを取得できませんでした。私はList<Music> musicList
にList<String> genre
を渡すと値は得られません。私もコードをデバッグしようとし、null値を取得しています。 List<String>
の値を使用してどのように結果を得ることができますか?android sqliteリストを使用して行を選択<String>
例 音楽テーブル
id | title | genre | artist
-----------------------------------
1 | MusicTest | pop, rnb | John
4 | Test | rnb | Jude
Genre
id genre
1 pop
2 rnb
3 rock
Genre Tags
id genre_id music_id
1 1 1
2 1 1
3 3 4
期待される結果がでなければなりません
Music
Test
これは私の検索クエリ方法です。私はこれは私がデータ
トーストにそれを取得する方法であると私は値にpop, rnb
public List<Music> getMusic(List<String> genres) {
List<Music> musicList= new ArrayList<>();
int size = genre.size();
Music music = new Music(); //getting null here
sqLiteDatabase = this.getReadableDatabase();
try {
for(int i = 0; i < size; i++) {
Cursor cursor = sqLiteDatabase.rawQuery("SELECT a.title AS MusicTitle"
+ ", GROUP_CONCAT(t.genre) AS Genre FROM music AS a"
+ " LEFT JOIN genre_tags AS gt ON gt.id_music = a.music_id"
+ " LEFT JOIN genre AS g ON g.genre_id = gt.id_genre"
+ " WHERE g.genre LIKE '%" + genres + "%'"
+ " GROUP BY a.music_id, a.title", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
music.setTitle(cursor.getString(0));
musicList.add(music); //getting null here
cursor.moveToNext();
}
cursor.close();
}
sqLiteDatabase.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
sqLiteDatabase.close();
}
return musicList; //returns size = 0
}
は、単一のジャンルから
public List<Music> getMusic(String genre) {
List<Music> musicList= new ArrayList<>();
sqLiteDatabase = this.getReadableDatabase();
Music music = new Music();
Cursor cursor = sqLiteDatabase.rawQuery("SELECT a.title AS MusicTitle"
+ ", GROUP_CONCAT(t.genre) AS Genre FROM music AS a"
+ " LEFT JOIN genre_tags AS gt ON gt.id_music = a.music_id"
+ " LEFT JOIN genre AS g ON g.genre_id = gt.id_genre"
+ " WHERE g.genre LIKE '%" + genre + "%'"
+ " GROUP BY a.music_id, a.title", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
music.setTitle(cursor.getString(0));
musicList.add(music);
cursor.moveToNext();
}
cursor.close();
return musicList;
}
をデータを取得するクエリを更新しました
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
TextView textView = (TextView) findViewById(R.id.main);
List<String> genre= (List<String>)bundle.getSerializable("selectedGenres");
ただし、ここにデータを渡すときmusicList
私は取得しません任意の値
DatabaseHandler db = new DatabaseHandler(this);
List<Music> musicList= db.getMusic(genre);
assert musicList!= null;
String a = "";
for(Music ms : musicList) {
a = a + ms.getTitle() + "\n";
}
textView.setText(a);
音楽の音楽=新しい音楽();このオブジェクトをカーソルループの外側に作成してください –
@brahmyadigopulaまだ動作していません –
ここでグループ連結を使用する必要がありますhttp://dba.stackexchange.com/questions/19121/combine-column-from-multiple-rows-into- 1行のsqliteとここにもhttp://www.sqlite.org/lang_aggfunc.html#groupconcat –