user2714061
user2714061

Reputation: 15

Cant understand reason for Null pointer

I am trying to run a thread in the following code but it is crashing by some unknown reason. This is the code ->

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());
    }
}

}

The following is its 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)

I would also like to know what is looper and its significant importance in a thread execution?

Upvotes: 1

Views: 307

Answers (2)

Injustice
Injustice

Reputation: 38

The Looper is the thread used to run a message loop. Threads don't have messages by default so you have to implement them yourself.

As for the NPE, check out allprog's answer.

Upvotes: 0

allprog
allprog

Reputation: 16790

If you call the managedQuery() method before the activity's onCreate(), then the method will not have a valid context. See this question for more info: why does getContentResolver() within Application cause NullPointerException?

Upvotes: 2

Related Questions