Android : Why is musicSrv null?

on Monday, August 4, 2014


Server connection:



private ServiceConnection musicConnection = new ServiceConnection(){

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MusicBinder binder = (MusicBinder)service;
//get service
musicSrv = binder.getService();
Log.i("Test",binder.getService().toString());
//pass list
musicSrv.setList(songList);
musicBound = true;
}

@Override
public void onServiceDisconnected(ComponentName name) {
musicBound = false;
}
};


Where I get an error:



public void songPicked(View view){
musicSrv.setSong(Integer.parseInt(view.getTag().toString()));
musicSrv.playSong();
Log.d("Item clicked","Song picked"+Integer.parseInt(view.getTag().toString()));
if(playbackPaused){
setController();
playbackPaused=false;
}
controller.show(0);
}


MusicService.java



package com.musicplayer;

import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.media.MediaPlayer;
import android.os.IBinder;

import java.util.ArrayList;
import android.content.ContentUris;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Binder;
import android.os.PowerManager;
import android.util.Log;

import java.util.Random;
import android.app.Notification;
import android.app.PendingIntent;

import com.lyricscloud.R;

public class MusicService extends Service implements
MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener,
MediaPlayer.OnCompletionListener {

//media player
private MediaPlayer player;
//song list
private ArrayList<Song> songs;
//current position
private int songPosn;

private String songTitle="";
private static final int NOTIFY_ID=1;


private final IBinder musicBind = new MusicBinder();
public void setList(ArrayList<Song> theSongs){
songs=theSongs;
}

public class MusicBinder extends Binder {
MusicService getService() {
return MusicService.this;
}
}

public void initMusicPlayer(){
player.setWakeMode(getApplicationContext(),
PowerManager.PARTIAL_WAKE_LOCK);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setOnPreparedListener(this);
player.setOnCompletionListener(this);
player.setOnErrorListener(this);
}

public void onCreate(){
super.onCreate();
//initialize position
songPosn=0;
//create Player
player = new MediaPlayer();
initMusicPlayer();


}
@Override
public void onDestroy() {
stopForeground(true);
}


public void playSong(){
player.reset();
Song playSong = songs.get(songPosn);
songTitle=playSong.getTitle();
//get id
long currSong = playSong.getID();
//set uri
Uri trackUri = ContentUris.withAppendedId(
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
currSong);
try{
player.setDataSource(getApplicationContext(), trackUri);
}
catch(Exception e){
Log.e("MUSIC SERVICE", "Error setting data source", e);
}
player.prepareAsync();

}


@Override
public boolean onUnbind(Intent intent){
player.stop();
player.release();
return false;
}

@Override
public IBinder onBind(Intent intent) {
return musicBind;
}

public void onCompletion(MediaPlayer mp) {
if(player.getCurrentPosition() <= 0){
mp.reset();
playNext();
}
}
public int getPosn(){
return player.getCurrentPosition();
}

public int getDur(){
return player.getDuration();
}

public boolean isPng(){
return player.isPlaying();
}

public void pausePlayer(){
player.pause();
}

public void seek(int posn){
player.seekTo(posn);
}

public void go(){
player.start();
}

public void playPrev(){
songPosn--;
if(songPosn <= 0) songPosn=songs.size()-1;
playSong();
}

public void playNext(){
songPosn++;
if(songPosn >= songs.size()) songPosn=0;
playSong();
}


@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
mp.reset();
return false;
}

public void setSong(int songIndex){
songPosn=songIndex;
Log.d("Service", ""+songIndex);
}

@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
Intent notIntent = new Intent(this, MusicPlayer_Songs.class);
notIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendInt = PendingIntent.getActivity(this, 0,
notIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Notification.Builder builder = new Notification.Builder(this);

builder.setContentIntent(pendInt)
.setTicker(songTitle)
.setOngoing(true)
.setContentTitle("Playing");
builder.setContentText(songTitle);
Notification not = builder.build();

startForeground(NOTIFY_ID, not);
}
}


The error



08-04 22:50:31.796 23825-23825/com.lyricscloud.dev E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.lyricscloud.dev, PID: 23825
java.lang.NullPointerException
at com.musicplayer.MusicPlayer_Songs.songPicked(MusicPlayer_Songs.java:47)
at com.musicplayer.MusicPlayer_Songs$3.onItemClick(MusicPlayer_Songs.java:117)
at android.widget.AdapterView.performItemClick(AdapterView.java:308)
at android.widget.AbsListView.performItemClick(AbsListView.java:1478)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3480)
at android.widget.AbsListView$3.run(AbsListView.java:4823)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)


I'm not sure whats causing it, I need help please, the app is a musicplayer and whenever I click a list item it gives me that error


0 comments:

Post a Comment