Java 在android studio中单击原始文件夹中的ListView后,如何在第二个活动中播放原始文件夹中的多个音乐文件(.mp3)
音乐文件在列表视图中加载,但单击其列表项时,应用程序崩溃 MainActivity.JavaJava 在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
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());