2011-04-26 4 views
1

Я новичок в android. Я создал SharedPreferences для хранения имен плейлиста и имен песен в плейлисте. Теперь мне нужно переименовать плейлист.Как переименовать существующий файл общих предпочтений в Android

И еще: Как удалить файл SharedPreferences (например, PlaylistName.xml), когда я удаляю плейлист?

ответ

4

Наконец, я могу переименовать файл sharedpreference.

Для справки, в моем контексте код:

String fileName=etlistName.getText().toString(); 
File f=new File("/data/data/eywa.musicplayer/shared_prefs/"+PlayListName+".xml"); 
f.renameTo(new File("/data/data/eywa.musicplayer/shared_prefs/"+fileName+".xml")); 

SharedPreferences mySharedPreferences=getSharedPreferences("list_of_playlist",Activity.MODE_PRIVATE); 
SharedPreferences.Editor editor = mySharedPreferences.edit(); 
editor.remove(PlayListName); 
editor.putString(fileName, fileName); 
editor.commit(); 
PlayListName=fileName; 

И для удаления playlistName.xml:

for (int i=0; i<selectedItems.size();i++) 
{//remove the songs names from the playlist 
    SharedPreferences sp=getSharedPreferences(selectedItems.get(i),Activity.MODE_PRIVATE); 
    SharedPreferences.Editor ed=sp.edit(); 
    ed.clear(); 
    ed.commit(); 
    //remove the play list name from the list_of_playlist 
    SharedPreferences.Editor editor = mainPref.edit(); 
    editor.remove(selectedItems.get(i)); 
    //delete .xml file 
    File f=new File("/data/data/eywa.musicplayer/shared_prefs/"+selectedItems.get(i)+".xml"); 
    if(f.delete()) 
     System.out.println("file deleted") 
    editor.commit(); 
} 
selectedItems.clear(); 
+0

упс! код нарушен! Пожалуйста, попробуйте понять. Я новичок на сайте и андроиде тоже Спасибо Владимиру Ивану за предложения. – Baba

+0

, возможно, вам захочется проголосовать за его ответ, если это поможет. Я также предоставил для ответа ответ, чтобы помочь очистить форматирование. –

0

Вы выбрали не лучшее хранилище для плейлистов. База данных намного больше подходит вашим потребностям. Хотя вы все равно можете удалить файл sp с помощью основного java io.

+0

Спасибо Владимиру. Хорошо, я буду использовать базу данных. Для удаления sp-файла я использовал 'deleteFile (fileName);' Он не удаляет файл. – Baba

4

Доступ файл из "/ данные/данные/..." не надежный так как я думаю, что это не тот же путь для всех телефонов (устройства Samsung - это разные AFAIK).

Я предпочитаю следующий метод, который в основном «реплицирует» старые общие префы и затем очищает его. Этот метод не удаляет старый файл общих файлов prefs, но больше relibale IMHO.

SharedPreferences settingsOld = context.getSharedPreferences(nameOld, Context.MODE_PRIVATE); 
SharedPreferences settingsNew = context.getSharedPreferences(nameNew, Context.MODE_PRIVATE); 
SharedPreferences.Editor editorNew = settingsNew.edit(); 
Map<String, ?> all = settingsOld.getAll(); 
for (Entry<String, ?> x : all.entrySet()) { 

    if  (x.getValue().getClass().equals(Boolean.class)) editorNew.putBoolean(x.getKey(), (Boolean)x.getValue()); 
    else if (x.getValue().getClass().equals(Float.class)) editorNew.putFloat(x.getKey(), (Float)x.getValue()); 
    else if (x.getValue().getClass().equals(Integer.class)) editorNew.putInt(x.getKey(),  (Integer)x.getValue()); 
    else if (x.getValue().getClass().equals(Long.class)) editorNew.putLong(x.getKey(), (Long)x.getValue()); 
    else if (x.getValue().getClass().equals(String.class)) editorNew.putString(x.getKey(), (String)x.getValue()); 

} 
editorNew.commit(); 
SharedPreferences.Editor editorOld = settingsOld.edit(); 
editorOld.clear(); 
editorOld.commit();