Java 尝试调用虚拟方法';void android.media.MediaPlayer.setLooping(布尔值)和#x27;关于空对象引用
我是Android新手,我正在制作一个电池警报应用程序,在这个应用程序中,用户可以选择铃声,我将铃声路径保存为字符串,并在Media player的服务类中获取铃声。我在Toast中得到了路径,但我的MediaPlayer对象中仍然有空对象引用,我不明白我做错了什么。这是我的密码 这是我的班级,我打电话给我的铃声管理员Java 尝试调用虚拟方法';void android.media.MediaPlayer.setLooping(布尔值)和#x27;关于空对象引用,java,android,android-studio,Java,Android,Android Studio,我是Android新手,我正在制作一个电池警报应用程序,在这个应用程序中,用户可以选择铃声,我将铃声路径保存为字符串,并在Media player的服务类中获取铃声。我在Toast中得到了路径,但我的MediaPlayer对象中仍然有空对象引用,我不明白我做错了什么。这是我的密码 这是我的班级,我打电话给我的铃声管理员 final Uri currentTone= RingtoneManager.getActualDefaultRingtone
final Uri currentTone=
RingtoneManager.getActualDefaultRingtoneUri(Setting.this,
RingtoneManager.TYPE_ALARM);
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentTone);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
startActivityForResult(intent, 999);`
然后在activityResult方法上调用它,并将路径保存在共享首选项中Toast中的路径如下“internal/audio/media/39”
然后在我的服务类中调用共享首选项
public static MediaPlayer alertsound;
public void onCreate() {
super.onCreate();
SharedPreferences t2 =getSharedPreferences("tuneforlow", Activity.MODE_PRIVATE);
String tune2 = t2.getString("lowpath","");
Toast.makeText(this, ""+tune2, Toast.LENGTH_SHORT).show();
Uri url = Uri.parse(tune2);
if(tune2.equals("")) {
Toast.makeText(this, "Not " +url, Toast.LENGTH_SHORT).show();
alertsound = MediaPlayer.create(getApplicationContext(), Settings.System.CONTENT_URI);
}else{
Toast.makeText(this, "yes" +url, Toast.LENGTH_SHORT).show();
alertsound = MediaPlayer.create(getApplicationContext(), url);
}
alertsound.setLooping(true);
}`
我将alertsound中的错误作为null对象引用获取,但我将在Toast中获取路径。保存uri.getPath()没有意义,因为它不是文件系统路径。改为保存uri.toString()。然后,您可以稍后将uri取回。你以后想用uri做什么?@blackapps非常感谢你。成功了。我花了几个小时试图找到解决办法,但那是我愚蠢的错误。非常感谢你。上帝保佑你。
public static MediaPlayer alertsound;
public void onCreate() {
super.onCreate();
SharedPreferences t2 =getSharedPreferences("tuneforlow", Activity.MODE_PRIVATE);
String tune2 = t2.getString("lowpath","");
Toast.makeText(this, ""+tune2, Toast.LENGTH_SHORT).show();
Uri url = Uri.parse(tune2);
if(tune2.equals("")) {
Toast.makeText(this, "Not " +url, Toast.LENGTH_SHORT).show();
alertsound = MediaPlayer.create(getApplicationContext(), Settings.System.CONTENT_URI);
}else{
Toast.makeText(this, "yes" +url, Toast.LENGTH_SHORT).show();
alertsound = MediaPlayer.create(getApplicationContext(), url);
}
alertsound.setLooping(true);
}`