MediaPlayer:Resources $ NotFoundException:资源ID#0x0

时间:2017-10-23 13:17:20

标签: java android sqlite android-mediaplayer

我正在使用MediaPlayer,SQLite等开发Android应用程序。我需要根据用户在数据库中的选择来播放带有MediaPlayer的mp3文件。我查看了Audio not playing in android. android.content.res.Resources$NotFoundException: Resource ID #0x0,但没有任何用处。当我尝试启动包含MediaPlayer的活动时,会出现此异常:

Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
                                                 at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:190)
                                                 at android.content.res.ResourcesImpl.openRawResourceFd(ResourcesImpl.java:287)
                                                 at android.content.res.Resources.openRawResourceFd(Resources.java:1267)
                                                 at android.media.MediaPlayer.create(MediaPlayer.java:931)
                                                 at android.media.MediaPlayer.create(MediaPlayer.java:914)
                                                 at com.primerosauxilios.udec.appprimerosauxilios.vista.activities.CasoAMostrarActivity.onCreate(CasoAMostrarActivity.java:53)
                                                 at android.app.Activity.performCreate(Activity.java:6679)
                                                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                                                 at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                                                 at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                 at android.os.Looper.loop(Looper.java:154) 
                                                 at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                 at java.lang.reflect.Method.invoke(Native Method) 
                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

这是我的代码:

Caso.java

package com.primerosauxilios.udec.appprimerosauxilios.logica;

import java.util.ArrayList;

/**
* Created by daniel on 3/10/17.
*/

public class Caso {

private int id;
private String nombre;
private String procedimiento;
private ArrayList<String> palabrasClaveBusqueda;
private String nombreAudioProcedimiento;

public Caso(){

}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getNombre() {
    return nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

public void asignarProcedimiento(String procedimiento){
    this.procedimiento = procedimiento;
}

public String getProcedimiento(){
    return procedimiento;
}

public void asignarAudioAProcedimiento(String nombreAudio){
    this.nombreAudioProcedimiento = nombreAudio;
}

public String getAudioProcedimiento(){
    return this.nombreAudioProcedimiento;
}


public void agregarPalabraClave(String palabraClave){

}

public boolean eliminarPalabraClave(String palabraClave){
    return false;
}

public boolean esPalabraClave(String palabraClave){
    return false;
}
}

CasoAMostrarActivity.java

package com.primerosauxilios.udec.appprimerosauxilios.vista.activities;

import android.content.res.Resources;
import android.media.MediaPlayer;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.primerosauxilios.udec.appprimerosauxilios.R;
import com.primerosauxilios.udec.appprimerosauxilios.logica.Aplicacion;
import com.primerosauxilios.udec.appprimerosauxilios.logica.Caso;
import com.primerosauxilios.udec.appprimerosauxilios.persistencia.DatabasePAConstantes;

public class CasoAMostrarActivity extends AppCompatActivity{

private TextView tvTexto;
private String nombreCaso;
private Caso caso;
private MediaPlayer reproductor;
private ImageButton btnRetrasar, btnPlayPause, btnAdelantar;
private double tiempoComienzo = 0, tiempoFinal = 0;
private int tiempoAdelante=5000, tiempoDetras=5000;
private boolean reproduciendoAudio;
private SeekBar barraProgreso;
private Handler manejador;
private static int unTiempo = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_caso);

    tvTexto = (TextView) findViewById(R.id.tvTexto);
    nombreCaso = getIntent().getStringExtra(DatabasePAConstantes.CASO);

    cargarCaso();

    btnPlayPause = (ImageButton) findViewById(R.id.btnPlayPause);
    btnAdelantar = (ImageButton) findViewById(R.id.btnAdelantar);

    Resources recursos = getApplicationContext().getResources();

    int archivo = getResources().getIdentifier(caso.getAudioProcedimiento().toLowerCase(),
                                                "raw",

    getApplicationContext().getPackageName());//Se obtiene el id del archivo mp3

    reproductor = MediaPlayer.create(this, archivo); // Se carga el 
    audio en el objeto MediaPlayer

    barraProgreso = (SeekBar)findViewById(R.id.barraProgreso);
    barraProgreso.setClickable(false);
    reproduciendoAudio = false;
    manejador = new Handler();

}

您可以看到,异常是从CasoAMostrarActivity.java的第53行生成的。

  

reproductor = MediaPlayer.create(this,archivo);

感谢您的帮助。感谢。

Ad hoc解决方案

 String audio = caso.getAudioProcedimiento().toLowerCase();
 audio = audio.substring(0, audio.length()-4); //With this, I delete the extension .mp3 from string audio
 int archivo = getResources().getIdentifier(audio,"raw", getApplicationContext().getPackageName());

 reproductor = MediaPlayer.create(this, archivo);

0 个答案:

没有答案