删除文件并从列表中删除其名称
Deleting a file and delete its name from a list
我正在尝试从列表视图中删除文件,我可以删除原始文件但不能从列表中删除名称,我想是因为我需要从数据库中删除它,问题是我不知道怎么做,有人可以帮忙吗?
// 适配器
listAdapter = new ArrayAdapter<String>(RecordsActivity.this, R.layout.support_simple_spinner_dropdown_item, MainActivity.listRecord);
recordList.setAdapter(listAdapter);
//删除文件(进展顺利,我猜名字没有从数据库中删除)
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
datadelete(filePath);
listAdapter.remove(recordToPlay);
listAdapter.notifyDataSetChanged();
delete.setVisibility(View.INVISIBLE);
share.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(), "File deleted successfully", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
// 数据删除方法
public void dataDelete(String inputPath) throws FileNotFoundException {
try {
// delete the original file
new File(inputPath).delete();
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
//主要Activity
File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "/Recordings");
directory.mkdirs();
//outPutFile = Environment.getExternalStorageDirectory().toString() + "/recording.3gp";
String dateTime = new SimpleDateFormat("dd.MM.yyyy hh-mm-ss aa", Locale.getDefault()).format(new Date());
//Date date = new Date();
//String dateTime = DateFormat.getDateTimeInstance().format(date);
outPutFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Recordings/"+dateTime +".m4a";
final String DIR_DATABASE = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Recordings";
String sqliteQuery = "CREATE TABLE IF NOT EXISTS Recordings (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , fileName VARCHAR)";
database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "db.sqlite", null);
database.execSQL(sqliteQuery);
getNames();
// 获取文件名称的 getNames 方法
public static void getNames(){
Cursor cursor = database.rawQuery("SELECT fileName FROM Recordings", null);
ArrayList<String> fileNames = new ArrayList<>();
while (cursor.moveToNext()) {
String fileName = cursor.getString(0);
fileNames.add(fileName);
}
cursor.close();
database.close();
listRecord.addAll(fileNames);
}
// 这是我保存文件的地方
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
stop.setEnabled(false);
pauseBtn.setEnabled(false);
SQLiteDatabase database = SQLiteDatabase.openDatabase(DIR_DATABASE + "db.sqlite", null, 0);
values = new ContentValues();
values.put("fileName", outPutFile.substring(31));
database.insert("Recordings", "", values);
Toast.makeText(getApplicationContext(), "Audio recorded", Toast.LENGTH_LONG).show();
Activity mActivity = MainActivity.this;
restartActivity(mActivity);
}
});
您应该添加删除查询以从数据库中删除数据。将您的代码更改为
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
datadelete(filePath);
database = this.getWritableDatabase();
database.execSQL("DELETE FROM Recordings WHERE fileName = '"+your file name Here+"'");
database.close();
listAdapter.remove(recordToPlay);
listAdapter.notifyDataSetChanged();
delete.setVisibility(View.INVISIBLE);
share.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(), "File deleted successfully", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
你应该在sqlite查询中写下你想删除的文件名。希望这会奏效。
我正在尝试从列表视图中删除文件,我可以删除原始文件但不能从列表中删除名称,我想是因为我需要从数据库中删除它,问题是我不知道怎么做,有人可以帮忙吗?
// 适配器
listAdapter = new ArrayAdapter<String>(RecordsActivity.this, R.layout.support_simple_spinner_dropdown_item, MainActivity.listRecord);
recordList.setAdapter(listAdapter);
//删除文件(进展顺利,我猜名字没有从数据库中删除)
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
datadelete(filePath);
listAdapter.remove(recordToPlay);
listAdapter.notifyDataSetChanged();
delete.setVisibility(View.INVISIBLE);
share.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(), "File deleted successfully", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
// 数据删除方法
public void dataDelete(String inputPath) throws FileNotFoundException {
try {
// delete the original file
new File(inputPath).delete();
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
//主要Activity
File directory = new File(Environment.getExternalStorageDirectory() + File.separator + "/Recordings");
directory.mkdirs();
//outPutFile = Environment.getExternalStorageDirectory().toString() + "/recording.3gp";
String dateTime = new SimpleDateFormat("dd.MM.yyyy hh-mm-ss aa", Locale.getDefault()).format(new Date());
//Date date = new Date();
//String dateTime = DateFormat.getDateTimeInstance().format(date);
outPutFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Recordings/"+dateTime +".m4a";
final String DIR_DATABASE = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Recordings";
String sqliteQuery = "CREATE TABLE IF NOT EXISTS Recordings (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , fileName VARCHAR)";
database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "db.sqlite", null);
database.execSQL(sqliteQuery);
getNames();
// 获取文件名称的 getNames 方法
public static void getNames(){
Cursor cursor = database.rawQuery("SELECT fileName FROM Recordings", null);
ArrayList<String> fileNames = new ArrayList<>();
while (cursor.moveToNext()) {
String fileName = cursor.getString(0);
fileNames.add(fileName);
}
cursor.close();
database.close();
listRecord.addAll(fileNames);
}
// 这是我保存文件的地方
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
stop.setEnabled(false);
pauseBtn.setEnabled(false);
SQLiteDatabase database = SQLiteDatabase.openDatabase(DIR_DATABASE + "db.sqlite", null, 0);
values = new ContentValues();
values.put("fileName", outPutFile.substring(31));
database.insert("Recordings", "", values);
Toast.makeText(getApplicationContext(), "Audio recorded", Toast.LENGTH_LONG).show();
Activity mActivity = MainActivity.this;
restartActivity(mActivity);
}
});
您应该添加删除查询以从数据库中删除数据。将您的代码更改为
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
datadelete(filePath);
database = this.getWritableDatabase();
database.execSQL("DELETE FROM Recordings WHERE fileName = '"+your file name Here+"'");
database.close();
listAdapter.remove(recordToPlay);
listAdapter.notifyDataSetChanged();
delete.setVisibility(View.INVISIBLE);
share.setVisibility(View.INVISIBLE);
Toast.makeText(getApplicationContext(), "File deleted successfully", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
你应该在sqlite查询中写下你想删除的文件名。希望这会奏效。