Ich habe eine Tabelle mit Audiodaten im BLOB-Format gespeichert. Ich möchte die Audiodateien abspielen, habe aber Probleme beim Aufrufen der Methode aus der Datenbank.Wiedergabeliste <byte[]> Audiodateien von SQLite-Datenbank
Das ist mein DatabaseAccess.java
public List<byte[]> getAudio(long i) {
List<byte[]> list = new ArrayList<>();
File file;
FileOutputStream fos;
byte[] byteaudio = null;
String selectAudio = "SELECT VocabAudio FROM Vocab WHERE VocabTopic =" + i;
Cursor c = database.rawQuery(selectAudio, null);
if(c.moveToFirst())
do{
byteaudio = c.getBlob(c.getColumnIndex("VocabAudio"));
try{
file = File.createTempFile("audio", "audio");
fos = new FileOutputStream(file);
fos.write(byteaudio);
fos.close();
}catch (IOException e){
e.printStackTrace();
}
}while(c.moveToNext());
return list;
}
Dies ist meine Aktivitätsklasse, wo ich meine getAudio() -Methode aufrufen möchten. Es besagt, dass es keine Symbolvariablendatei finden kann (aus der Uri.fromFile (Datei)).
public void startSlides() {
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {
public void run() {
Intent intent = getIntent();
long topicId = intent.getLongExtra("SelectedTopicId", 0);
databaseAccess.open();
List<byte[]> audio = databaseAccess.getAudio(topicId);
mp= MediaPlayer.create(Choice.this,Uri.fromFile(file));
i++;
mp.start();
databaseAccess.close();
if (j == vocab.size()+1) {
timer.cancel();
}
}
});
}
}, 0, 1000;
}
Wer weiß, wie sollte ich die Methode getAudio() aufrufen? Vielen Dank.
** ** Horrible Praxis eine db mit BLOBs aufblasen !! –
Warum? Warum 'File.createTempFile' und schreibe es mit deinem BLOB-Inhalt, während du es in irgendeiner Datei behalten und den Pfad in deiner db behalten kannst? stimme ModularSynth zu 100% zu ... – pskink
@ModularSynth Es tut mir leid. Ich bin neu in Android. Irgendein Vorschlag wie soll ich es tun? – chernting