Razer Waran
Razer Waran

Reputation: 39

I am getting null pointer exception when i try to execute below program

Could some one please help me with the issues in the below code. when I try to run the below code, i am getting null pointer exception and the application ends.

But when i try to run the same code in Android version 2.3 its working but when i try to run this in android 4.4 its giving null pointer exception.

public class MainActivity extends ActionBarActivity implements OnClickListener {

SeekBar seek_bar; 
public Songlist songmanager;
public ArrayList<HashMap<String,String>> Songlist = new ArrayList<HashMap<String,String>>();
ImageButton play_button, pause_button, stop_button, list_button; 
MediaPlayer player; 
TextView text_shown; 
Handler seekHandler = new Handler();              /** Called when the activity is first created. */ 
private static final String TAG = null;


@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

player = new MediaPlayer();
songmanager = new Songlist();
Songlist = songmanager.getplaylist();
seek_bar = (SeekBar) findViewById(R.id.seekBar1); 
play_button = (ImageButton) findViewById(R.id.play); 
pause_button = (ImageButton) findViewById(R.id.pause); 
stop_button = (ImageButton)findViewById(R.id.stop);
list_button = (ImageButton) findViewById(R.id.list);
text_shown = (TextView) findViewById(R.id.textView1); 
play_button.setOnClickListener(this); 
pause_button.setOnClickListener(this); 
stop_button.setOnClickListener(this);
stop_button.setImageResource(R.drawable.stop_int);
play_button.setImageResource(R.drawable.play_int);
pause_button.setImageResource(R.drawable.pause_int);
list_button.setImageResource(R.drawable.listbtn);

playsong(0); 

list_button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        list_button.setImageResource(R.drawable.listbtn_aft);
        Intent in1 = new Intent(getBaseContext(),Playlist.class);
        startActivityForResult(in1, 100);   
    }
});

} 

public void onActivityResult(int requestcode, int resultcode, Intent data){
    list_button.setImageResource(R.drawable.listbtn);
    super.onActivityResult(requestcode, resultcode, data);
    if (resultcode == 100){
        int songnum = data.getExtras().getInt("songindex");
            playsong(songnum);
            player.start();
            play_button.setImageResource(R.drawable.play_aft);
            pause_button.setImageResource(R.drawable.pause_int);
            stop_button.setImageResource(R.drawable.stop_int);
            seek_bar.setMax(player.getDuration());
    }
}

private void playsong(int songnum) {
    try {
        player.reset();
        player.setDataSource(Songlist.get(songnum).get("songname"));
        player.prepare();
        seek_bar.setProgress(0);
        seek_bar.setMax(100);
        seekUpdation();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Throwable e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

Runnable run = new Runnable() { 
@Override 
public void run() { 
    seekUpdation(); 
} 
}; 
public void seekUpdation() { 
    seek_bar.setProgress(player.getCurrentPosition()); 
    seekHandler.postDelayed(run, 1000); 
} 
public void onDestroy(){
    player.stop();
    player.release();
    Log.d(TAG, "Player Crushed");
    super.onDestroy();
}    
@Override 
public void onClick(View view) { 
switch (view.getId()) { 
case R.id.play:
    text_shown.setText("Playing..."); 
    player.start();
    pause_button.setImageResource(R.drawable.pause_int);
    stop_button.setImageResource(R.drawable.stop_int);
    play_button.setImageResource(R.drawable.play_aft);
    seek_bar.setMax(player.getDuration());
break; 
case R.id.pause: 
    if(player.isPlaying()){
        player.pause(); 
        text_shown.setText("Paused..."); 
        play_button.setImageResource(R.drawable.play_int);
        pause_button.setImageResource(R.drawable.pause_aft);
    }

break;
case R.id.stop:
    if(player.isPlaying()){
        player.stop();
        text_shown.setText("Stopped...");
        play_button.setImageResource(R.drawable.play_int);
        pause_button.setImageResource(R.drawable.pause_int);
        stop_button.setImageResource(R.drawable.stop_aft);
        player.prepareAsync();
        player.seekTo(0);
    }
    else{
        try {
            player.prepare();
            player.seekTo(0);
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
break;
} 
}
}



class MP3filter implements FilenameFilter{
@Override
public boolean accept(File dir, String filename) {
    // TODO Auto-generated method stub
    return (filename.endsWith(".mp3"));
}
}

public class Songlist extends ActionBarActivity{

    public ArrayAdapter<String> ad;
    public ArrayList<HashMap<String, String>>  al = new ArrayList<HashMap<String, String>> ();

    @SuppressLint("SdCardPath") public final String SD_CARD = new String ("/sdcard/");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getplaylist();

    }

    public ArrayList<HashMap<String, String>> getplaylist() {
        // TODO Auto-generated method stub
          File home = new File(SD_CARD);
            if(home.listFiles(new MP3filter()).length > 0){
                for(File file:home.listFiles(new MP3filter())){
                    HashMap<String, String> song = new HashMap<String, String>();
                     song.put("songname", file.getPath());
                     al.add(song);
                }

            }
            return al;
    }

}

Logcat

08-28 23:18:49.002: E/AndroidRuntime(2118): FATAL EXCEPTION: main
08-28 23:18:49.002: E/AndroidRuntime(2118): Process: com.example.musicplay, PID: 2118
08-28 23:18:49.002: E/AndroidRuntime(2118): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.musicplay/com.example.musicplay.MainActivity}: java.lang.NullPointerException
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.os.Handler.dispatchMessage(Handler.java:102)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.os.Looper.loop(Looper.java:136)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.main(ActivityThread.java:5017)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at java.lang.reflect.Method.invokeNative(Native Method)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at java.lang.reflect.Method.invoke(Method.java:515)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at dalvik.system.NativeStart.main(Native Method)
08-28 23:18:49.002: E/AndroidRuntime(2118): Caused by: java.lang.NullPointerException
08-28 23:18:49.002: E/AndroidRuntime(2118):     at com.example.musicplay.Songlist.getplaylist(Songlist.java:39)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at com.example.musicplay.MainActivity.onCreate(MainActivity.java:38)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.Activity.performCreate(Activity.java:5231)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-28 23:18:49.002: E/AndroidRuntime(2118):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
08-28 23:18:49.002: E/AndroidRuntime(2118):     ... 11 more

Upvotes: 0

Views: 221

Answers (2)

Shadow Droid
Shadow Droid

Reputation: 1696

The method to find path of SD_CARD is correct

public final String SD_CARD = new String (Environment.getExternalStorageDirectory().getpath());

Two things you have to do is

1.Mention the permission in the manifest

uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"

2.Also check whether devices has External Storage or not. If yes then it is readable or not.To check it's availability you can follow the code mentioned in the documentation.

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Upvotes: 0

Seshu Vinay
Seshu Vinay

Reputation: 13588

Instead of public final String SD_CARD = new String ("/sdcard/");

write

public final String SD_CARD = new String (Environment.getExternalStorageDirectory());

Upvotes: 1

Related Questions