Android setVideoUri(uri.parse(res))错误

Android setVideoUri(uri.parse(res))错误,android,resources,android-videoview,Android,Resources,Android Videoview,正在尝试播放位于R.raw中的视频。我有一个xml数组,用于获取要播放的文件。如果我对视频进行硬编码,视频效果很好,如下所示: VideoView myVideoView = (VideoView)findViewById(R.id.videoview0); myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName()+"/"+R.raw.test)); myVideoView.setMediaControl

正在尝试播放位于R.raw中的视频。我有一个xml数组,用于获取要播放的文件。如果我对视频进行硬编码,视频效果很好,如下所示:

VideoView myVideoView = (VideoView)findViewById(R.id.videoview0);
myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName()+"/"+R.raw.test));
myVideoView.setMediaController(new MediaController(this));
myVideoView.requestFocus();
myVideoView.start();
string-array name="arrTest"
item>@raw/test1 /item
item>@raw/test2 /item
item>@raw/test3 /item
/string-array
但是,如果我从阵列中获取视频,我的错误侦听器集和视频将不会播放。解析的字符串与上述内容完全相同。我就是这样做的(为简单起见修改了代码):

我的xml数组如下所示:

VideoView myVideoView = (VideoView)findViewById(R.id.videoview0);
myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName()+"/"+R.raw.test));
myVideoView.setMediaController(new MediaController(this));
myVideoView.requestFocus();
myVideoView.start();
string-array name="arrTest"
item>@raw/test1 /item
item>@raw/test2 /item
item>@raw/test3 /item
/string-array

因为
R.raw.test
实际上不是字符串,而是您正在访问的资源id的
int
表示。(您可以在LogCat中打印其值)
因此,
getPackageName()+“/R.raw.+getResources()…
不起作用。

扩展Andy Res的(非)答案。。。他是对的,那是行不通的。。。但“为什么”

因为R.raw.myvideo是R类中的一个变量,它映射到某个数字(即Andy所说的URI要查找的int)

如果您想在运行时将该字符串转换为该int,下面是您的操作方法

    @SuppressWarnings("rawtypes")
    public static int getResourceId(String name,  Class resType){       
        try {          
            return resType.getField(name).getInt(null);        
        }
        catch (Exception e) {
           // Log.d(TAG, "Failure to get drawable id.", e);
        }
        return 0;
    }

   int resId = getResourceId(
    getResources().getResourceEntryName(xmlArr.getResourceId(intVideoToPlay))
   , R.raw.class); //this will be 0 if it can't find the String in the raw class or the relevant id
  //keep in mind that I have no idea if your xmlArr method is valid... make sure to log what it's returning to verify that you're getting the String you're expecting from it
try{

   String uriParse = "android.resource://" + getPackageName() +"/" + resId;
   //... now you can use your uriParse as you do above.

}catch(Exception e){

}