2016-07-08 9 views
0

私は音楽プレーヤーアプリを作成しています。私は "Tab3Tracks"と "NowPlaying"という2つのクラスを持っています。 "Tab3Tacks"クラスでは、曲はListViewに読み込まれます。誰かが曲をクリックすると、他のクラスがその曲を演奏できるように、その曲の位置を他のクラスに送ります。しかし、曲をクリックしている間にエラーが表示されます。私はどこで間違いをしているのかわかりません。 logcatでは、NowPlayingクラスで「Invalid Index 0、size is 0」というエラーが表示されました。私はLogCatエラーコードを掲示しています。私のコードで間違いがないかチェックしてください。前もって感謝します。無効なインデックスは、再生中にゼロになります

Tab3Tracksクラス

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クラス

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エラー

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) 

答えて

1

モミひどく、このような質問を避けてくださいなぜこのコードは動作していませんか?彼らは多くのdownvotesを取得する傾向があり、通常すぐに閉じられるので、デバッグのヘルプを求める。常に問題を最小限に抑えて分離してください。 自分でデバッグすると今後の投稿用にHow to create a Minimal, Complete, and Verifiable exampleを参照してください。

は今ここに playSong(0)で、質問するあなたは、位置 0の要素にアクセスしようとするが、リストは空であり、このような位置、したがって、 IndexOutOfBoundsはありません。

at com.digital.thefearstuff.tfsmusicplayer.NowPlaying.playSong(NowPlaying.java:286) 
    at com.digital.thefearstuff.tfsmusicplayer.NowPlaying.onCreate(NowPlaying.java:83) 

songsListは、それが判明したとおりです。これは、trackslistが空であることを意味します。それ自体がnullになり、addのwhileループをスキップする可能性があります。しかし、あなたはコード全体しか持っていないので、自分でデバッグすべきです。このよう

if (cursor!=null){ 
    if(cursor.moveToFirst()){ 
     do{ 
      int trackIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); 
      trackslist.add(cursor.getString(trackIndex)); 
     }while(cursor.moveToNext()); 
    } 
} else { 
    Log.d("cursor", "null"); 
} 
cursor.close(); 
として if (cursor != null){

elseLogを追加し、logcatでそれを探します。それをデバッグする

+0

両方のクラスの配列リストのサイズをチェックしようとしました... "Tab3tracks"クラスでは正の値を示しますが、 "NowPlaying"クラスではサイズゼロを示します。 –

+0

フラグメントをアクティビティのレイアウトに追加しましたか?[フラグメントの作成](https://developer.android.com/training/basics/fragments/creating.html#AddInLayout)および*アクティビティへのフラグメントの追加*および* [ここ](https://developer.android.com/guide/components/fragments.html)の断片*を管理していますか? – user8

関連する問題