删除文件并从列表中删除其名称

时间:2017-08-13 18:48:33

标签: android list sqlite android-sqlite delete-file

我正在尝试从列表视图中删除文件,我能够删除原始文件而不是从列表中删除名称,我认为是因为我需要从数据库中删除它,问题是我不要&# 39;知道怎么样,有人可以帮忙吗?

//适配器

        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();
            }

        }
    });

// dataDelete方法

    public void dataDelete(String inputPath) throws FileNotFoundException {
    try {
        // delete the original file
        new File(inputPath).delete();

    } catch (Exception e) {
        Log.e("tag", e.getMessage());
    }
}

//主要活动

            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);


            }
        });

1 个答案:

答案 0 :(得分:1)

您应该添加删除查询以从数据库中删除数据。将您的代码更改为

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查询中编写要删除的文件名。希望这会奏效。