次のコードでスレッドを実行しようとしていますが、不明な理由でクラッシュしています。これはコードです - >
public class StaticRef extends Activity implements Runnable
{
Cursor cursor;
Thread tSearchSongs=new Thread(this,"SearchSongs");
WritingXML wxml;
public void searchforsongs()
{
tSearchSongs.start();
}
@Override
public void run()
{
Looper.prepare();
try
{
wxml=new WritingXML();
String[] STAR = { "*" };
Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
cursor = managedQuery(allsongsuri, STAR, selection, null, null);
if (cursor != null)
{
if (cursor.moveToFirst())
{
do
{
//SongName
String song_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
//SongID
int song_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
//SongPath
String fullpath = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
//Song's album name
String album_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
//Song's album ID
int album_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
//Song's artist name
String artist_name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
//Song's artist ID
int artist_id = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));
try
{
wxml.AddDatatoXML(Integer.toString(song_id) , song_name, fullpath);
}
catch(Exception exp)
{
Log.e("~~Exception Occurred in StaticRef~~", exp.toString());
}
} while (cursor.moveToNext());
}
cursor.close();
}
}
catch(NullPointerException exp)
{
Log.e("~~Null Pointer Exception~~",exp.toString());
android.util.Log.e("->>" , "~~stacktrace~~", exp);
}
catch(Exception exp)
{
Log.e("~~Exception~~",exp.toString());
}
}
}
以下はそのLOGCATです
08-29 13:54:03.149: E/~~Null Pointer Exception~~(13899): java.lang.NullPointerException
08-29 13:54:03.159: E/->>(13899): ~~stacktrace~~
08-29 13:54:03.159: E/->>(13899): java.lang.NullPointerException
08-29 13:54:03.159: E/->>(13899): at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:91)
08-29 13:54:03.159: E/->>(13899): at android.app.Activity.managedQuery(Activity.java:1708)
08-29 13:54:03.159: E/->>(13899): at com.example.boombastic.StaticRef.run(StaticRef.java:53)
08-29 13:54:03.159: E/->>(13899): at java.lang.Thread.run(Thread.java:856)
また、ルーパーとは何か、スレッド実行におけるその重要性も知りたいですか?