2013-12-08 4 views
0

Я новичок здесь, но я читаю каждый день вопросы на этом форуме. Я создаю музыкальный плеер на боковой панели слева (используя библиотеку «простой боковой ящик»), когда я касаюсь кнопки вверх (на панели действий), затем открывается левый ящик. На левом ящике это ListView (простой) со всеми вашими песнями. Когда я нажимаю на элемент, то, что должен начать играть ... но краш-приложение. Это ошибкаAndroid: ошибка Java.NullPointerException в моем приложении

12-08 14:33:58.760: E/AndroidRuntime(12420): FATAL EXCEPTION: main 
12-08 14:33:58.760: E/AndroidRuntime(12420): java.lang.NullPointerException 
12-08 14:33:58.760: E/AndroidRuntime(12420): at com.xand.holomusicplayer.Maincu$1.onItemClick(Maincu.java:58) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at android.widget.AdapterView.performItemClick(AdapterView.java:297) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at android.widget.AbsListView.performItemClick(AbsListView.java:1123) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2931) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at android.widget.AbsListView$2.run(AbsListView.java:3616) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at android.os.Handler.handleCallback(Handler.java:730) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at android.os.Looper.loop(Looper.java:137) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at android.app.ActivityThread.main(ActivityThread.java:5287) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at java.lang.reflect.Method.invokeNative(Native Method) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at java.lang.reflect.Method.invoke(Method.java:525) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
12-08 14:33:58.760: E/AndroidRuntime(12420): at dalvik.system.NativeStart.main(Native Method) 

Я не знаю, почему это это код:

private String[] mAudioPath; 
private MediaPlayer mMediaPlayer; 
private String[] mMusicList; 
private SimpleSideDrawer mSlidingMenu; 
ListView list; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    mSlidingMenu = new SimpleSideDrawer(this); 
    mSlidingMenu.setLeftBehindContentView(R.layout.playlist); 
    list = (ListView) findViewById (R.id.listView1); 
    mMediaPlayer = new MediaPlayer(); 
    mMusicList = getAudioList(); 
    ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mMusicList); 
    list.setAdapter(mAdapter); 
    list.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) { 
     try { 
      playSong(mAudioPath[arg2]); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
     }); 
    } 
private String[] getAudioList() { 
    final Cursor mCursor = getContentResolver().query(
      MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
      new String[] { MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DATA }, null, null, 
      "LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC"); 

    int count = mCursor.getCount(); 

    String[] songs = new String[count]; 
    String[] mAudioPath = new String[count]; 
    int i = 0; 
    if (mCursor.moveToFirst()) { 
     do { 
      songs[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)); 
      mAudioPath[i] = mCursor.getString(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)); 
      i++; 
     } while (mCursor.moveToNext()); 
    } 

    mCursor.close(); 

    return songs; 
} 

private void playSong(String path) throws IllegalArgumentException, 
IllegalStateException, IOException { 

Log.d("ringtone", "playSong :: " + path); 

mMediaPlayer.reset(); 
mMediaPlayer.setDataSource(path);  
mMediaPlayer.prepare(); 
mMediaPlayer.start(); 

}

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     mSlidingMenu.toggleLeftDrawer(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

Почему приложение падает, когда я пытаюсь что-то сыграть? Пожалуйста, помогите мне :(:)

+0

'java.lang.NullPointerException 12-08 14: 33: 58,760: E/AndroidRuntime (12420): в com.xand.holomusicplayer.Maincu $ 1.onItemClick (Maincu.java:58) 'Что такое строка 58? Похоже, гахфи прав. Где вы инициализируете и устанавливаете mAudioPath? – Simon

+0

} catch (IOException e) { – XandaPPds

+0

Nope. Эта строка не может вызвать это исключение. Либо код, который вы опубликовали, не совсем то же самое, что при его запуске и получении исключения, вы неправильно подсчитали строки или не узнали, что ваш редактор IDE показывает номера строк в строке состояния. – Simon

ответ

0

Все другие вещи в сторону, ваш NullPointerException от onItemClick() метод происходит, вероятно, когда вы делаете:

playSong(mAudioPath[arg2]); 

Причина этого заключается в том, что mAudioPath не инициализирован и нуль. Зачем?

Вы объявили его в качестве поля в классе Maincu как:

private String[] mAudioPath; 

Вы думаете, что вы инициализация его по телефону getAudioList(), но внутри этого метода вы объявляете:

String[] mAudioPath = new String[count]; 

, который подставляет вашу глобальную переменную mAudioPath, поэтому ваш местный mAudioPath инициализируется вместо глобального, который затем используется для воспроизведения песни. Чтобы исправить, в вашем getAudioList(), изменение:

String[] mAudioPath = new String[count]; 

к:

mAudioPath = new String[count]; 
0

Это потому, что ваш член mAudioPath имеет значение NULL. Обязательно установите его перед вызовом onItemClick().

+0

скажите мне больше, пожалуйста – XandaPPds

Смежные вопросы