views:

67

answers:

1

I copied song.mp3 to my project's assets directory and wrote this code:

private MediaPlayer mp;

Uri uri = Uri.parse("file:///android_asset/song.mp3");

mp=MediaPlayer.create(this, uri);

After running the create statement, the variable mp is null. What is wrong?

Thanks.

A: 

Try this and see if any exceptions are caught:

try {
    MediaPlayer mp = new MediaPlayer();
    mp.setDataSource(this, uri);
}
catch (NullReferenceArgument e) {
    Log.d(TAG, "NullReferenceException: " + e.getMessage());
}
catch (IllegalStateException e) {
    Log.d(TAG, "IllegalStateException: " + e.getMessage());
}
catch (IOException e) {
    Log.d(TAG, "IOException: " + e.getMessage());
}
catch (IllegalArgumentException e) {
    Log.d(TAG, "IllegalArgumentException: " + e.getMessage());
}
catch (SecurityException e) {
    Log.d(TAG, "SecurityException: " + e.getMessage());
}

The exception caught will explain what is going wrong in your create. According the the docs, the static create method is just shorthand for what is in the try block above. The major difference that I can see is that the static method create doesn't throw while setDataSource does.

Jere.Jones
I added exception handling as you suggested and an mp.prepare() statement and I am getting this error on the prepare()06-22 14:45:20.806: ERROR/PlayerDriver(554): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported06-22 14:45:20.806: ERROR/MediaPlayer(857): error (1, -4)06-22 14:45:20.987: DEBUG/dalvikvm(857): JDWP invocation returning with exceptObj=0x43744d6806-22 14:45:33.056: DEBUG/ASSETTEST(857): IOException: Prepare failed.: status=0x106-22 14:45:43.068: WARN/System.err(857): java.io.IOException: Prepare failed.: status=0x1Next?
CalvinS
I solved this by fixing the code to access the mp3 file in the assets.mp = new MediaPlayer();AssetFileDescriptor afd = getAssets().openFd("song.mp3");mp.setDataSource(afd.getFileDescriptor());Thanks Jere!
CalvinS