我正在使用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);