ListView отправляет намерение в действие musicplayer Activity. Намерения содержат целые значения, используемые для решения песен и он работает нормально для небольшого числа элементов в скажу список воспроизведения (а ListView), но для большого количества песен, он выходит из строя (показано Вход ниже): ListView:NullPointerException из-за большого размера массива
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);
}
});
метод организации очередей для хранения имен и индексы песен в массивах
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();
}
}
Вход:
01-07 00: 03: 50,293 27292-27292/com.imhotep.musicplayer Х/AndroidRuntime: неустранимое: Основной процесса: com.imhotep.musicplayer, ПИД: 27292 java.lang.NullPointerException: Попытка чтобы вызвать виртуальный метод 'android.view.View android.view.View.findViewById (INT)' на ссылки объекта на нуль com.imhotep.musicplayer.FilteredTracksActivity.Queuer (FilteredTracksActivity.java:307) в com.imhotep.musicplayer.FilteredTracksActivity $ 4.onItemClick (FilteredTracksActivity.java:285) на android. widget.AdapterView.performItemClick (AdapterView.java:310) на android.widget.AbsListView.performItemClick (AbsListView.java:1213) на android.widget.AbsListView $ PerformClick.run (AbsListView.java:3256) на android. widget.AbsListView $ 3.run (AbsListView.java:4190) на android.os.Handler.handleCallback (Handler.java:815) на android.os.Handler.dispatchMessage (Handler.java:104) на android.os .Looper.loop (Looper.java:194) на android.app.ActivityThread.main (ActivityThread.java:5706) на java.lang.reflect.Method.invoke (собственный метод) на java.la ng.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)
Нужна помощь в этом. код Adapter:
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);
Он сообщает вам, где именно проблема. Поскольку вы используете «ListView», ваши представления повторно используются. Вам нужно использовать «ViewHolder», чтобы получить нужные результаты. http://stackoverflow.com/a/19289890/1269953 – Pztar
'NullPointerException из-за большого размера массива' ** NO **. NPE ** всегда ** из-за объекта, на который ссылались, но не были установлены. –