protected void onCreate(Bundle savedInstanceState) {
//미디어DB를 읽고 해당 파일에 맞는 음악 메타데이터를 추출(Open API)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] proj = {
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TRACK
};
cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);
if(cursor!=null && cursor.moveToFirst()){
int dataColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
int albumColumn = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
int artColumn = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int trackColumn = cursor.getColumnIndex(MediaStore.Audio.Media.TRACK);
do{
String mdatastream = cursor.getString(dataColumn);
if (mdatastream.endsWith(".mp3")) {
String album= cursor.getString(albumColumn);
String artist = cursor.getString(artColumn);
String track = cursor.getString(trackColumn);
new NetworkTask().execute(artist, album, track);
}
}while(cursor.moveToNext());
}
//new NetworkTask().execute(null, null, null);
}
class NetworkTask extends AsyncTask<String, Void, Void> {
protected Void doInBackground(String... params) {
// TODO Auto-generated method stub
GracenoteWebAPI api;
try {
api = new GracenoteWebAPI(clientID, clientTag); //api 키 생성
String userId = api.register();
Log.i("userID", userId);
//메타데이터 검색
GracenoteMetadata result = api.searchTrack(params[0], params[1], params[2]);
result.print();
//Thread.sleep(100);
} catch (GracenoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
Gracenote라는 OpenAPI를 사용중입니다.
WebAPI를 모바일에서 사용하려고 하고있는데 네트워크 연결이 필요해서 AsyncTask를 사용하였습니다.
충 29개 파일에 대한 곡을 뽑아와야하는데요, 한 10개 정도만 검색하고 멈추네요..ㅎㅎㅎ
테스트용이라 메인은 그냥 Hello world만 나오게하고 Log를 이용하여 정보가 제대로 넘어왔는지를 확인합니다.
02-08 23:15:06.865: E/AndroidRuntime(23682): FATAL EXCEPTION: AsyncTask #5
02-08 23:15:06.865: E/AndroidRuntime(23682): java.lang.RuntimeException: An error occured while executing doInBackground()
02-08 23:15:06.865: E/AndroidRuntime(23682): at android.os.AsyncTask$3.done(AsyncTask.java:299)
02-08 23:15:06.865: E/AndroidRuntime(23682): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
02-08 23:15:06.865: E/AndroidRuntime(23682): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
02-08 23:15:06.865: E/AndroidRuntime(23682): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
02-08 23:15:06.865: E/AndroidRuntime(23682): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-08 23:15:06.865: E/AndroidRuntime(23682): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-08 23:15:06.865: E/AndroidRuntime(23682): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-08 23:15:06.865: E/AndroidRuntime(23682): at java.lang.Thread.run(Thread.java:841)
02-08 23:15:06.865: E/AndroidRuntime(23682): Caused by: java.lang.NullPointerException
02-08 23:15:06.865: E/AndroidRuntime(23682): at radams.gracenote.webapi.GracenoteMetadata.<init>(GracenoteMetadata.java:23)
02-08 23:15:06.865: E/AndroidRuntime(23682): at radams.gracenote.webapi.GracenoteWebAPI._parseResponse(GracenoteWebAPI.java:276)
02-08 23:15:06.865: E/AndroidRuntime(23682): at radams.gracenote.webapi.GracenoteWebAPI._execute(GracenoteWebAPI.java:135)
02-08 23:15:06.865: E/AndroidRuntime(23682): at radams.gracenote.webapi.GracenoteWebAPI.searchTrack(GracenoteWebAPI.java:89)
02-08 23:15:06.865: E/AndroidRuntime(23682): at com.teste.gracenotetest.MainActivity$NetworkTask.doInBackground(MainActivity.java:96)
02-08 23:15:06.865: E/AndroidRuntime(23682): at com.teste.gracenotetest.MainActivity$NetworkTask.doInBackground(MainActivity.java:1)
02-08 23:15:06.865: E/AndroidRuntime(23682): at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-08 23:15:06.865: E/AndroidRuntime(23682): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
02-08 23:15:06.865: E/AndroidRuntime(23682): ... 4 more
위에가 로그부분 입니다. 무엇이 문제인지 잘 모르겠어서... 확인 한 번 부탁드립니다.