Вставка Android contentResolver не работает

Буду признателен за помощь в проблеме. Я пытаюсь добавить песни в список воспроизведения, но всякий раз, когда я пытаюсь использовать вставку или bulkInsert, это не работает, если я использую вставку, я просто получаю нулевую строку в качестве возвращаемого значения, если я использую bulkInsert, она будет выбросить исключение NullPointerException (так что в основном это означает, что строки не были вставлены, потому что bulkInsert возвращает количество вставленных строк). Ниже у меня есть код, который я использовал, и снимок состояния моего метода, когда я его отлаживал:

 public void savePlaylist(Playlist p) {

    String name = p.getPlaylistName();
    Uri playlistURI = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
    ContentResolver contentResolver = context.getContentResolver();
    Cursor playlistCursor = contentResolver.query(playlistURI, new String[]{"*"}, null, null, null);
    long playlistID = getPlaylistID(playlistCursor, name);


    if (playlistID == 0)

    {
        ContentValues playlistValue = new ContentValues();
        playlistValue.put(MediaStore.Audio.Playlists.NAME, name);
        playlistValue.put(MediaStore.Audio.Playlists.DATE_MODIFIED, System.currentTimeMillis());
        contentResolver.insert(playlistURI, playlistValue);
        playlistID = getPlaylistID(contentResolver.query(playlistURI, new String[]{"*"}, null, null, null), name);
    }

    Uri insertionUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistID);

    ContentValues[] rowsToAdd = new ContentValues[p.getSongs().size()];

    for (int i = 0; i < p.getSongs().size(); i++) {
        Song toAdd = p.getSongs().get(i);
        rowsToAdd[i] = new ContentValues();
        rowsToAdd[i].put(MediaStore.Audio.Playlists.Members.AUDIO_ID, toAdd.getId());

    }

     try {
        int result = context.getContentResolver().bulkInsert(insertionUri, rowsToAdd);

        if (result > 0) {
            Log.d("DEBUG", "Row inserted succesfully");
        }
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

Я должен указать, что этот метод используется для добавления списка воспроизведения, если он не существует, и добавления в него песен, если он существует, прежде чем я начну обрабатывать события, например, если песни уже существуют или нет, я должен сначала решить эту проблему.

Привязка при отладке до момента, когда я вызываю bulkInsert


person Matthew    schedule 13.10.2017    source источник
comment
Ранее я писал о создании списков воспроизведения stackoverflow.com/questions /34883564/   -  person Theo    schedule 14.10.2017
comment
Привет, спасибо за ответ, разница (кроме того, что я использую bulkInsert ) от вашего кода и моего заключается в том, что я не помещаю значения PLAYLIST_ID и AUDIO_ORDER в строку, которую я хочу вставить, остальное почти то же самое, не так ли? думаете, что тот факт, что я вставляю только AUDIO_ID, заставит его взорваться?   -  person Matthew    schedule 16.10.2017
comment
Вам нужен playlist_id, иначе трек не знает, в каком плейлисте он находится. Без него смысла нет.   -  person Theo    schedule 17.10.2017