Java 尝试调用虚拟方法';void android.media.MediaPlayer.setLooping(布尔值)和#x27;关于空对象引用

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

我是Android新手,我正在制作一个电池警报应用程序,在这个应用程序中,用户可以选择铃声,我将铃声路径保存为字符串,并在Media player的服务类中获取铃声。我在Toast中得到了路径,但我的MediaPlayer对象中仍然有空对象引用,我不明白我做错了什么。这是我的密码

这是我的班级,我打电话给我的铃声管理员

  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);
}`