안드로이드 개발 질문/답변
(글 수 45,052)
public void updateSongList(){
Music[] music = new Music[10];
int cnt = 0;
Resources r = getResources();
BitmapDrawable mDefaultAlbumIcon = (BitmapDrawable)r.getDrawable(R.drawable.icon);
String[] mCursorCols = new String[]{
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ALBUM
};
Cursor cur = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mCursorCols, null, null, null);
if( cur.isFirst()){
String title, artist, album;
Drawable d;
int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE);
int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int albumColumn = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM);
do{
title = cur.getString(titleColumn);
artist = cur.getString(artistColumn);
album = cur.getString(albumColumn);
d = MusicUtils.getCachedArtwork(this, cnt+1, mDefaultAlbumIcon);
music[cnt] = new Music(artist, title, album, d);
songs.add(music[cnt]);
cnt++;
}while(cur.moveToNext());
}
MusicInformation songList = new MusicInformation(this, R.layout.musictr_row, songs);
setListAdapter(songList);
listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
08-20 01:12:52.356: ERROR/AndroidRuntime(3153): Uncaught handler: thread main exiting due to uncaught exception
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): java.lang.RuntimeException: Unable to start activity ComponentInfo{kr.or.mp3/kr.or.mp3.Musictrack}: java.lang.NullPointerException
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2497)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2513)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1864)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.os.Handler.dispatchMessage(Handler.java:99)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.os.Looper.loop(Looper.java:123)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.main(ActivityThread.java:4364)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at java.lang.reflect.Method.invokeNative(Native Method)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at java.lang.reflect.Method.invoke(Method.java:521)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at dalvik.system.NativeStart.main(Native Method)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): Caused by: java.lang.NullPointerException
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at kr.or.mp3.Musictrack.updateSongList(MusicTR.java:78)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at kr.or.mp3.MusictrackonCreate(MusicTR.java:50)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2460)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): ... 11 more
예제를 퍼와서 돌려보는중에 에뮬에서는 작동이 원만하게 잘되는대요
실제 단말기에 올렸을때는 저기 update 부분부터 에러가 나서 더이상 넘어가지가 않내요
여러가지 찾아본결과 쿼리가 문제 인거 같은데요 ... 해결법을 모르겠내요 혹시나 아시는분있으 시면
금쪽같은 시간좀 내주세요 ^^
Music[] music = new Music[10];
int cnt = 0;
Resources r = getResources();
BitmapDrawable mDefaultAlbumIcon = (BitmapDrawable)r.getDrawable(R.drawable.icon);
String[] mCursorCols = new String[]{
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ALBUM
};
Cursor cur = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mCursorCols, null, null, null);
if( cur.isFirst()){
String title, artist, album;
Drawable d;
int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE);
int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int albumColumn = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM);
do{
title = cur.getString(titleColumn);
artist = cur.getString(artistColumn);
album = cur.getString(albumColumn);
d = MusicUtils.getCachedArtwork(this, cnt+1, mDefaultAlbumIcon);
music[cnt] = new Music(artist, title, album, d);
songs.add(music[cnt]);
cnt++;
}while(cur.moveToNext());
}
MusicInformation songList = new MusicInformation(this, R.layout.musictr_row, songs);
setListAdapter(songList);
listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
08-20 01:12:52.356: ERROR/AndroidRuntime(3153): Uncaught handler: thread main exiting due to uncaught exception
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): java.lang.RuntimeException: Unable to start activity ComponentInfo{kr.or.mp3/kr.or.mp3.Musictrack}: java.lang.NullPointerException
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2497)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2513)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1864)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.os.Handler.dispatchMessage(Handler.java:99)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.os.Looper.loop(Looper.java:123)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.main(ActivityThread.java:4364)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at java.lang.reflect.Method.invokeNative(Native Method)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at java.lang.reflect.Method.invoke(Method.java:521)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at dalvik.system.NativeStart.main(Native Method)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): Caused by: java.lang.NullPointerException
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at kr.or.mp3.Musictrack.updateSongList(MusicTR.java:78)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at kr.or.mp3.MusictrackonCreate(MusicTR.java:50)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2460)
08-20 01:12:52.403: ERROR/AndroidRuntime(3153): ... 11 more
예제를 퍼와서 돌려보는중에 에뮬에서는 작동이 원만하게 잘되는대요
실제 단말기에 올렸을때는 저기 update 부분부터 에러가 나서 더이상 넘어가지가 않내요
여러가지 찾아본결과 쿼리가 문제 인거 같은데요 ... 해결법을 모르겠내요 혹시나 아시는분있으 시면
금쪽같은 시간좀 내주세요 ^^
2011.07.13 11:04:37
Music[] music = new Music[10];
실제 폰에는 노래 파일이 많아서 [10]개 만 정적으로 배정된 배열 접근시 오류가 생기더군요
11개부터..
music[cnt] = new Music(artist, title, album, d);
songs.add(music[cnt]);
이부분을
songs.add(new Music(artist, title, album, d));
이런 식으로 하면 오류없이 실행은되는데요
앨범 아트가 맞게 나오지 않는 문제가 생기네요
다른 로직을 조금 더 수정하면 해결될듯해요 ㅎ
익셉션만 보고 끙끙대시기보다
디버깅을 통해 과정을 따라가시는 숙련이 필요합니다.
얼마전에 디버깅의 중요성을 느낀 1인입니다 .ㅎ