2013-12-08 12 views
0

저는 여기 새로 왔지만이 포럼에서 매일 질문을 읽었습니다. 왼쪽의 서랍에 기반한 뮤직 플레이어를 만들고 있습니다 (라이브러리 '단순 서랍'사용). 작업 표시 줄의 위쪽 버튼을 터치 한 다음 왼쪽 서랍을 열면 왼쪽 서랍에 나는 그 재생을 시작해야 할 항목을 누릅니다 ...하지만 응용 프로그램 충돌. 때 모든의 노래와 목록보기 (단순)입니다. 이것은 내가 왜이 모르는 오류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(); 

}

0 : 코드는

무언가를하려고 할 때 응용 프로그램이 중단되는 이유는 무엇입니까? 제발 도와주세요 :(:)

+0

'java.lang.NullPointerException이 12-08 14 : 33 : 58.760 : E/AndroidRuntime (12420) :에서 com.xand.holomusicplayer.Maincu $ 1.onItemClick (Maincu.java:58)'58 행이란 무엇입니까? gahfy가 맞아 보이는군요. mAudioPath는 어디에서 초기화하고 설정합니까? – Simon

+0

} catch (IOException e) { – XandaPPds

+0

아니요. 그 행은이 예외를 발생시킬 수 없습니다. 게시 한 코드가 실행하고 예외를 얻을 때와 정확히 일치하지 않는 경우 행을 잘못 계산했거나 IDE 편집기가 상태 표시 줄에 행 번호를 표시한다는 것을 알지 못했습니다. – Simon

답변

0

다른 모든 것을 제쳐두고, onItemClick에서 NullPointerException가() 당신이 할 때 방법은 아마 발생합니다

playSong(mAudioPath[arg2]); 

그 이유 mAudioPath가 초기화 및 null이되지 않는 것입니다. 왜?

과 같이 클래스 Maincu의 필드로 선언 : 당신은 당신이 getAudioList()를 호출하여 초기화하는되어 있지만,이 방법 안에, 당신이 선언 생각

private String[] mAudioPath; 

:

String[] mAudioPath = new String[count]; 

전역 변수 mAudioPath를 음영 처리하므로 전역 대신에 로컬 mAudioPath가 초기화되므로 노래를 재생하는 데 사용됩니다.

String[] mAudioPath = new String[count]; 

에 : 변경) (당신의 getAudioList으로 해결하려면

mAudioPath = new String[count]; 
0

이것은 mAudioPath 회원이 null이기 때문입니다. onItemClick()으로 전화하기 전에 설정하십시오.

+0

자세히 알려주세요. – XandaPPds

관련 문제