4

edittext と imagebutton を提供するだけのアプリを作成しようとしています。ボタンをクリックすると、編集テキスト ボックスで指定されたアルバムがプレイリストに追加されます。アルバムはランダムに選択する必要があります。言うまでもなく、アルバム トラックは正しい順序にする必要があります。後で機能を追加できます。保存、上書き、削除など。インターフェイスはありますが、コードに苦労しています。私は ContentProviders の概念を理解しています。したがって、コードは次のようにする必要があります。

  • プレイリストにアクセスします。これは、MediaStore.Audio.Playlists を使用することで実現できると思います

  • アルバムにアクセスします。これは、MediaStore.Audio.Albums を使用して達成されると思います

  • プレイリストに追加

プレイリストにアクセスするための次のコード (このサイトから取得したほとんどのビット。ありがとう) がありますが、Null Exception エラーでクラッシュします。

public void checkforplaylists()
{
    //Get a cursor over all playlists.
    final ContentResolver resolver= MediaProvider.mContentResolver;
    final Uri uri=MediaStore.Audio.Playlists.INTERNAL_CONTENT_URI;
    final String id=MediaStore.Audio.Playlists._ID;
    final String name=MediaStore.Audio.Playlists.NAME;
    final String[]columns={id,name};
    final Cursor playlists= resolver.query(uri, columns, null, null, null);

        if(playlists==null)
            {
                Log.e(TAG,"Found no playlists.");
                    return;
            }
    return;
}

助けてくれる人はいますか?

4

3 に答える 3

1

つまり、割り当ての1つがnullであるという意味だと思います。NullPointerException次に、意図したオブジェクトのメンバーにアクセスしようとします。ほとんどの場合そうresolverですが、行番号を報告する必要があること、および/またはデバッガーでそれをステップスルーする必要があることを確認してください。

于 2012-08-17T15:39:28.390 に答える
1

これは機能します。ContentResolver を使用する場合、Context (this) が必要です。

public void checkforplaylists(Context context)
{
    ContentResolver cr = context.getContentResolver();
    final Uri uri=MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
    final String id=MediaStore.Audio.Playlists._ID;
    final String name=MediaStore.Audio.Playlists.NAME;
    final String[]columns={id,name};
    final Cursor playlists= cr.query(uri, columns, null, null, null);
        if(playlists==null)
            {
                Log.e(TAG,"Found no playlists.");
                    return;
            }
        Log.e(TAG,"Found playlists.");
    return;
}
于 2012-08-23T18:56:52.397 に答える
1

このコードを使用すると、動作します

public boolean addPlaylist(String pname) {


    Uri playlists = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
    Cursor c = resolver.query(playlists, new String[] { "*" }, null, null,
            null);
    long playlistId = 0;
    c.moveToFirst();
    do {
        String plname = c.getString(c
                .getColumnIndex(MediaStore.Audio.Playlists.NAME));
        if (plname.equalsIgnoreCase(pname)) {
            playlistId = c.getLong(c
                    .getColumnIndex(MediaStore.Audio.Playlists._ID));
            break;
        }
    } while (c.moveToNext());
    c.close();

    if (playlistId != 0) {
        Uri deleteUri = ContentUris.withAppendedId(playlists, playlistId);
        Log.d(TAG, "REMOVING Existing Playlist: " + playlistId);

        // delete the playlist
        resolver.delete(deleteUri, null, null);
    }

    Log.d(TAG, "CREATING PLAYLIST: " + pname);
    ContentValues v1 = new ContentValues();
    v1.put(MediaStore.Audio.Playlists.NAME, pname);
    v1.put(MediaStore.Audio.Playlists.DATE_MODIFIED,
            System.currentTimeMillis());
    Uri newpl = resolver.insert(playlists, v1);
    Log.d(TAG, "Added PlayLIst: " + newpl);

    flag=true;
    return flag;
}
于 2015-06-12T05:11:35.657 に答える