Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android studio中单击原始文件夹中的ListView后,如何在第二个活动中播放原始文件夹中的多个音乐文件(.mp3)_Java_Android_Android Studio_Android Mediaplayer_Android Music Player - Fatal编程技术网

Java 在android studio中单击原始文件夹中的ListView后,如何在第二个活动中播放原始文件夹中的多个音乐文件(.mp3)

Java 在android studio中单击原始文件夹中的ListView后,如何在第二个活动中播放原始文件夹中的多个音乐文件(.mp3),java,android,android-studio,android-mediaplayer,android-music-player,Java,Android,Android Studio,Android Mediaplayer,Android Music Player,音乐文件在列表视图中加载,但单击其列表项时,应用程序崩溃 MainActivity.Java public class MainActivity extends AppCompatActivity { ListView myListViewForSong; String[] items; TextView textView; List<String> mysongs; @Override protected void onCreate

音乐文件在列表视图中加载,但单击其列表项时,应用程序崩溃

MainActivity.Java

public class MainActivity extends AppCompatActivity {
    ListView myListViewForSong;
    String[] items;
    TextView textView;
    List<String> mysongs;

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

        myListViewForSong = findViewById(R.id.mySongListView);


        try {
            display();
        } catch (IllegalAccessException e)
        {
            e.printStackTrace();
        }

    }


    void display() throws IllegalAccessException {


        // final ArrayList<File> mysongs = findSong(Environment.clas);


        final ArrayList<String> mysongs = new ArrayList<String>();


        final Field[] fields = R.raw.class.getFields();

        for (int i = 0; i < fields.length; i++) {


            mysongs.add(fields[i].getName().toString());

            // items[i] = mysongs.get(i).getName().toString().replace(".mp3", "").replace(".wav", "");

        }


        items = new String[mysongs.size()];

        for (int i = 0; i < mysongs.size(); i++) {
            items[i] = mysongs.get(i).toString();


        }

        ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

        myListViewForSong.setAdapter(myAdapter);

        myListViewForSong.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                String songName = myListViewForSong.getItemAtPosition(position).toString();


                startActivity(new Intent(getApplicationContext(),
                        PlayerActivity.class).putExtra("songs", mysongs).putExtra("pos", position).
                        putExtra("songname", songName));
            }
        });


    }


}
抛出以下异常

原因:java.lang.ClassCastException:java.lang.String无法转换为java.io.File

完成堆栈跟踪

Uri u = Uri.parse(mysongs.get(positn).toString());
E/AndroidRuntime:致命异常:主 流程:com.example.babies摇篮曲,PID:4216 java.lang.RuntimeException:无法启动活动组件信息{com.example.babieslullabies/com.example.babieslullabies.PlayerActivity}: java.lang.ClassCastException:无法将java.lang.String转换为 java.io.xml文件 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3303)上 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3411) 位于android.app.ActivityThread.-wrap12(未知来源:0) 在android.app.ActivityThread$H.handleMessage上(ActivityThread.java:1994) 位于android.os.Handler.dispatchMessage(Handler.java:108) 位于android.os.Looper.loop(Looper.java:166) 位于android.app.ActivityThread.main(ActivityThread.java:7529) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:245) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921) 原因:java.lang.ClassCastException:java.lang.String无法转换为java.io.File 在com.example.babieslullabies.PlayerActivity.onCreate(PlayerActivity.java:113)上 位于android.app.Activity.performCreate(Activity.java:7383) 位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218) 位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3256) 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3411) 位于android.app.ActivityThread.-wrap12(未知来源:0) 在android.app.ActivityThread$H.handleMessage上(ActivityThread.java:1994) 位于android.os.Handler.dispatchMessage(Handler.java:108) 位于android.os.Looper.loop(Looper.java:166) 位于android.app.ActivityThread.main(ActivityThread.java:7529) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:245) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921) I/进程:发送信号。PID:4216 SIG:9进程4216终止


很抱歉我的回复太晚了,但是我怎么能提供一个完整的堆栈跟踪呢?
周围的那一整段红线是由:java.lang.ClassCastException…
行引起的。请把你的问题添加进去。这可能是因为您的歌曲列表在
main活动中为
String
,但在
PlayerActivity中为
File
。但是,我们需要查看整个堆栈跟踪以确定当前问题。请先生检查上面完整的堆栈跟踪OK,是的,就是那行抛出的,这是因为
mysongs
MainActivity
中是
ArrayList
,但在
PlayerActivity
中是
ArrayList
。您没有处理任何文件,因此您肯定不希望它成为
ArrayList
。实际上,您不会在任何地方使用
文件。由于这些是原始资源,您应该只使用
字符串
名称来显示在
列表视图
中。在其他地方,您应该将它们作为
int
值处理。有一个
MediaPlayer.create()
接受原始资源ID,而不是
Uri
。这就是你想用的。
Uri u = Uri.parse(mysongs.get(positn).toString());