중간쯤에 보면 song(빨간줄) 이라는 구문이 오류가 나는데 정확히 무슨 오류인지랑 해결방법 좀 알려주시면 감사하겠습니다.
package com.music;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MusicList extends ListActivity{
private ListView listview;
private static final String MEDIA_PATH = new String("/sdcard/");
private ArrayList<Music> songs = new ArrayList<Music>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listview = getListView();
// SD카드로 부터 파일 목록 불러오기
updateSongList();
}
public void updateSongList(){
Music[] music = new Music[10];
int cnt = 0;
Resources r = getResources();
BitmapDrawable mDefaultAlbumIcon = (BitmapDrawable)r.getDrawable(R.drawable.git);
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.moveToFirst() ){
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.row, songs);
setListAdapter(songList);
listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
@Override
// 리스트에서 곡을 클릭했을때 재생
protected void onListItemClick(ListView l,View v, int position, long id){
//File home = new File(MEDIA_PATH);
//String[] list = new String[10];
//list = home.list(new MP3Filter());
File bp = Environment.getExternalStorageDirectory();
String[] fl = bp.list();
Intent it = new Intent(this, MusicPlay.class);
it.putExtra("filename", songs.get(position));
startActivity(it);
}
private class MusicInformation extends ArrayAdapter<Music>{
private ArrayList<Music> items;
public MusicInformation(Context context, int textViewResourceId, ArrayList<Music> items){
super(context, textViewResourceId, items);
this.items = items;
}
@Override
public View getView(int position, View view, ViewGroup parent){
View v = view;
if( v == null ){
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
Music m = items.get(position);
if( m != null ){
ImageView imageview = (ImageView)v.findViewById(R.id.row_album_art);
TextView tt = (TextView)v.findViewById(R.id.row_artist);
TextView bt = (TextView)v.findViewById(R.id.row_title);
if( tt != null ){
tt.setText(m.getGasu() + " - " + m.getJemok());
}
if( bt != null ){
bt.setText(m.getAlbumName());
}
if( imageview != null ){
imageview.setImageDrawable(m.getImage());
}
}
return v;
}
}
class Music{
private String gasu;
private String jemok;
private String albumName;
private Drawable drawimage;
public Music(String _gasu, String _jemok, String _albumName, Drawable _image){
this.gasu = _gasu;
this.jemok = _jemok;
this.albumName = _albumName;
this.drawimage = _image;
}
public String getGasu(){
return gasu;
}
public String getJemok(){
return jemok;
}
public String getAlbumName(){
return albumName;
}
public Drawable getImage(){
return drawimage;
}
}
class MP3Filter implements FilenameFilter{
public boolean accept(File dir, String name){
return name.endsWith(".mp3");
}
}
public boolean onKeyDown(int keyCode, KeyEvent event){
switch(keyCode){
case KeyEvent.KEYCODE_BACK:
String alertTitle = getResources().getString(R.string.app_name);
String buttonMessage = getResources().getString(R.string.alert_msg_exit);
String buttonYes = getResources().getString(R.string.button_yes);
String buttonNo = getResources().getString(R.string.button_no);
new AlertDialog.Builder(MusicList.this).setTitle(alertTitle).setMessage(buttonMessage).setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
//@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
moveTaskToBack(true);
finish();
}
}).setNegativeButton(buttonNo, null).show();
}
return true;
}
}
Music이라는 클래스의 객체를 putExtra로 인텐트에 실어서 보내려면 Parcelable 을 구현해야 합니다.
아래의 예제에 보면 Parcelable을 구현하는 방법이 나와 있습니다.
http://stackoverflow.com/questions/2139134/how-to-send-an-object-from-one-android-activity-to-another-using-intents