Ich erstelle eine Musik-Player-App. Ich habe zwei Klassen namens "Tab3Tracks" und "NowPlaying". In der Klasse "Tab3Tacks" werden Songs in ListView geladen. Wenn also jemand auf einen Song klickt, sendet er die Position dieses Songs an eine andere Klasse, so dass eine andere Klasse diesen Song spielen kann. Aber ich bekomme Fehler beim Klicken auf Lied. Ich weiß nicht, wo ich Fehler mache. In Logcat erhielt ich den Fehler "Ungültiger Index 0, Größe ist 0" in der NowPlaying-Klasse. Ich poste LogCat Fehlercode. Überprüfen Sie meinen Code auf Fehler. Danke im Voraus.Ungültiger Index ist Null beim Abspielen von Song
Tab3Tracks Klasse
public class Tab3Tracks extends ListFragment {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
private ArrayList<String> trackslist = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.tab3tracks, container, false);
final String trackid = MediaStore.Audio.Media._ID;
final String trackno = MediaStore.Audio.Media.TRACK;
final String trackname = MediaStore.Audio.Media.TITLE;
final String path = MediaStore.Audio.Media.DATA;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
ContentResolver cr = getContext().getContentResolver();
final String[] projection = {trackid,trackno,trackname,path
};
final Cursor cursor = cr.query(uri,projection,null,null,null);
if (cursor!=null){
if(cursor.moveToFirst()){
do{
int trackIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
trackslist.add(cursor.getString(trackIndex));
}while(cursor.moveToNext());
}
} cursor.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
getActivity(),R.layout.playlist_item,R.id.songTitle,trackslist
);
setListAdapter(adapter);
return v;
}
public ArrayList<String> getList(){
return trackslist;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
int songIndex = position;
// Starting new intent
Intent in = new Intent(getActivity(), NowPlaying.class);
// Sending songIndex to PlayerActivity
in.putExtra("songIndex", songIndex);
startActivityForResult(in, 100);
getActivity().finish();
}
}
NowPlaying Klasse
public class NowPlaying extends AppCompatActivity {
public ArrayList<String> songsList = new ArrayList<String>();
public Tab3Tracks tab3tracks;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.player);
// Getting all songs list
tab3tracks = new Tab3Tracks();
songsList= tab3tracks.getList();
// By default play first song
playSong(0);
}
/**
* Receiving song index from playlist view
* and play the song
*/
@Override
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 100) {
currentSongIndex = data.getExtras().getInt("songIndex");
// play selected song
playSong(currentSongIndex);
}
}
/**
* Function to play a song
*
* @param songIndex - index of song
*/
public void playSong(int songIndex) {
// Play song
try {
mp.reset();
mp.setDataSource(songsList.get(songIndex));
mp.prepare();
mp.start();
// Displaying Song title
String songTitle = songsList.get(songIndex);
songTitleLabel.setText(songTitle);
// Changing Button Image to pause image
btnPlay.setImageResource(R.drawable.btn_pause);
// set Progress bar values
songProgressBar.setProgress(0);
songProgressBar.setMax(100);
// Updating progress bar
updateProgressBar();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
LogCat Fehler
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.digital.thefearstuff.tfsmusicplayer/com.digital.thefearstuff.tfsmusicplayer.NowPlaying}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5466)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at com.digital.thefearstuff.tfsmusicplayer.NowPlaying.playSong(NowPlaying.java:286)
at com.digital.thefearstuff.tfsmusicplayer.NowPlaying.onCreate(NowPlaying.java:83)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2403)
Ich habe versucht, die Größe der Array-Liste in beiden Klassen zu überprüfen ... In der Klasse "Tab3tracks" zeigt es einen positiven Wert, aber in "NowPlaying" -Klasse zeigt es die Größe Null. –
Haben Sie das Fragment dem Layout Ihrer Aktivität hinzugefügt, dann [Erstellen eines Fragments] (https://developer.android.com/training/basics/fragments/creating.html#AddInLayout) und * Hinzufügen eines Fragments zu einer Aktivität * und * Splitter * von [hier] verwalten (https://developer.android.com/guide/components/fragments.html)? – user8