2013-12-22 2 views
1

나는 이것에 대해 매우 어리 석고, 여러 자습서 및 Stackoverflow 질문을 보았지만 여전히 수정할 수는 없습니다.Android : 서비스를 인스턴스화 할 수 없습니다. Java.NullPointerException

매우 간단한 Android mp3 스트림 리스너를 쓰고 있습니다. Stream이 백그라운드에서 실행될 수 있도록 Sevice를 사용하고 싶습니다.

12-22 : 08 : 42 : 58.738 : dalvikvm/W (1701) : threadid = 1 : 그러나 서비스를 시작할 수 스레드 캐치되지 않는 예외 (그룹 = 0xb3aa2ba8)

12 출사 -22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : 치명적인 예외 : 주 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : 프로세스 : com.wankoradio, PID : 1701 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : java.lang.RuntimeException : 서비스 com.wankoradio.MediaPlayerService를 인스턴스화 할 수 없습니다. java.lang.NullPointerException 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : android.app.ActivityThread.handleCreateService (ActivityThread.java:2556) 1 222 08 : 42 : 58.788 : E/AndroidRuntime (1701) : android.app.ActivityThread.access $ 1800 (ActivityThread.java:135) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1278) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : android.os.Handler.dispatchMessage (Handler.java:102) 12 -22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : android.os.Looper.loop (Looper.java:136) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : android. app.ActivityThread.main (ActivityThread.java:5017) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : java.lang.reflect.Method.invokeNative (기본 메소드) 12-22 08:42 : 58.788 : E/AndroidRuntime (1701) : java.lang.reflect.Method.invoke (Method.java:515) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : com.android.int에서 (ZygoteInit.java:779) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java : 595) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : at dalvik.system.NativeStart.main (기본 메소드) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : 원인 : java.lang.NullPointerException 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701) : android.content.ContextWrapper.getSystemService (ContextWrapper.java:540) 12-22 08 : 42 : 58.788 : E/AndroidRuntime (1701). com.wankoradio.MediaPlayerService에서 (MediaPlayerService.java:27)

내 MainActivity가 서비스를 시작하고 같이 좀 보이는됩니다 :

public class MainActivity extends Activity implements OnClickListener { 
private Button pausePlayButton; 
private static String ACTION_PLAY = "com.action.PLAY"; 
private MediaPlayer mediaPlayer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    pausePlayButton = (Button) findViewById(R.id.pausePlay_Button); 
    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    pausePlayButton.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
if (!isPlaying) { 
    pausePlayButton.setBackgroundResource(R.drawable.button_pause); 

    Intent mServiceIntent = new Intent(getApplicationContext(), MediaPlayerService.class);  
    mServiceIntent.setAction(ACTION_PLAY); 
    startService(mServiceIntent); 

을 내 서비스는 다음과 같습니다 : 나는 그것을 디버깅을 시도

public class MediaPlayerService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener { 
    //Creating a matching Intent 
    private static final String ACTION_PLAY = "com.action.PLAY"; 
    //Creating our main MediaPlayer 
    MediaPlayer mMediaPlayer = null; 
    //NotificationID 
    private static final int NOTIFICATION_ID = 1234; 

    //Wifi should not be shut down while our App is running, therefore we Lock it 
    WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE)) 
      .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock"); 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Notification notification = StartNotification(); 
     startForeground(NOTIFICATION_ID, notification); 
    } 

    public int onStartCommand(Intent intent, int flags, int startId) { 
     if (intent.getAction().equals(ACTION_PLAY)) {   
      //Wifi should not be shut down while our App is running, therefore we Lock it 
      wifiLock.acquire(); 

      StartMediaPlayer(); 
     }      
     return 0; 
    } 

    private Notification StartNotification() { 
     String songName = "Woop"; 
     // assign the song name to songName 
     PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, 
        new Intent(getApplicationContext(), MainActivity.class), 
        PendingIntent.FLAG_UPDATE_CURRENT); 
     Notification notification = new Notification(); 
     //notification.tickerText = text; 
     //notification.icon = R.drawable.play0; 
     notification.flags |= Notification.FLAG_ONGOING_EVENT; 
     NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
     notificationManager.notify(NOTIFICATION_ID, notification); 
     return notification; 
    } 

만에서 onCreate 또는 내 서비스의 onStartCommand는하지 않습니다

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.wankoradio.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <service 
     android:enabled="true" 
     android:name=".MediaPlayerService" 
     android:label="MediaPlayer Service" > 
     <intent-filter> 
     <action 
      android:name = "com.action.PLAY"> 
     </action> 
     </intent-filter> 
    </service> 
    <receiver 
     android:name=".MainActivity"> 
     <intent-filter> 
     <action 
      android:name = "com.action.PLAY"> 
     </action> 
     </intent-filter> 
    </receiver> 
</application> 
: 여기

을 호출되는 나의 매니페스트입니다

시간을 낭비하면 죄송합니다. WinPhone에서 처음으로 안드로이드 응용 프로그램입니다.

답변

1
WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE)) 
     .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock"); 

개체 서비스 인스턴스화시 시스템 서비스를 사용할 수 없습니다.wifiLockonCreate() 이상으로 초기화하도록 연기하십시오.

+0

문제가 지속되면 감사합니다, atm 테스트, 내 질문이 변경됩니다 – Master117

+0

아, 감사합니다, 실제로 그 문제가있었습니다. Notify 관리자와 모든 것을 나중에 OnCreate에서 변경하여 WifiLock을 잊어 버렸습니다. catLog는 읽기가 어렵습니다. 9 분 안에 받아 들일거야. – Master117

관련 문제