The listview sends an intent to musicplayer Activity. The intent contains integer values used to address songs and it works fine for small number of elements in say a Playlist (a listview) but for large number of songs it crashes (shown in Log below): Listview:
final int size = lv.getAdapter().getCount();
final String[] F= new String[size];
final int Q[] = new int[size];
// listening to single listitem click
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting listitem index
TextView textView = (TextView) view.findViewById(android.R.id.text1);
String songName = textView.getText().toString();//lv.getItemAtPosition(position).toString();
Queuer(F,Q,size);
//songIndex = manager.getSongIndex(songName, getApplicationContext());
// Starting new intent
Intent i = new Intent(getApplicationContext(), MusicPlayerActivity.class);
Log.d("TAG", "onItemClick");
//// Sending songIndex to PlayerActivity
i.putExtra("size",size);
i.putExtra("queue",Q);
i.putExtra("filtered",true);
// Toast.makeText(getApplicationContext(), "Qi:" + Q[0], Toast.LENGTH_LONG).show();
i.putExtra("start", position);
startActivityForResult(i, 7);
}
});
Queuer method to store the names and indices of songs in arrays
void Queuer(String[] F,int[] Q, int size){
for(int i=0;i<size;i++){
View v = getListView().getChildAt(i);
TextView tv= (TextView) v.findViewById(android.R.id.text1);
F[i] = tv.getText().toString();
Q[i] = manager.getSongIndex(F[i],getApplicationContext());
Toast.makeText(getApplicationContext(), "SongName:" + F[i] , Toast.LENGTH_LONG).show();
}
}
Log:
01-07 00:03:50.293 27292-27292/com.imhotep.musicplayer E/AndroidRuntime: FATAL EXCEPTION: main Process: com.imhotep.musicplayer, PID: 27292 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference at com.imhotep.musicplayer.FilteredTracksActivity.Queuer(FilteredTracksActivity.java:307) at com.imhotep.musicplayer.FilteredTracksActivity$4.onItemClick(FilteredTracksActivity.java:285) at android.widget.AdapterView.performItemClick(AdapterView.java:310) at android.widget.AbsListView.performItemClick(AbsListView.java:1213) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3256) at android.widget.AbsListView$3.run(AbsListView.java:4190) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5706) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1033) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
Need help with this. Adapter code:
String[] columns = {MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.MIME_TYPE};
String where = android.provider.MediaStore.Audio.Media.ARTIST + "=?";
String whereVal[] = { s };
String orderBy = android.provider.MediaStore.Audio.Media.TITLE;
Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
columns, where, whereVal, orderBy);
//Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
// new String[]{MediaStore.Audio.Media._ID,MediaStore.Audio.Media.TITLE}, where, whereVal, orderBy);
String[] displayFields = new String[]{MediaStore.Audio.Media.TITLE};
int[] displayViews = new int[]{android.R.id.text1};
ListAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, cursor, displayFields,
displayViews, 0);
setListAdapter(adapter);