2016-04-14 12 views
0

私のアプリでバックグラウンドミュージックを追加しました。私は3つのアクティビティを持っていますので、3つのアクティビティによって制御される音楽コントローラクラスを設計したいと思います。しかし、MainActivtiyにserviceIntentのオブジェクトを作成してMusicControllerクラスに渡すと、serviceIntentを開始することができず、エラーはnullポインタの例外です。誰もこの問題を理解する方法はありますか?前もって感謝します。startService(インテント)関数を呼び出すことができません。インテントはヌルポインタ例外です

Logcat

04-13 22:30:15.189: D/AndroidRuntime(9581): Shutting down VM 04-13 22:30:15.190: E/AndroidRuntime(9581): FATAL EXCEPTION: main 04-13 22:30:15.190: E/AndroidRuntime(9581): Process: com.example.funwithmath, PID: 9581 04-13 22:30:15.190: E/AndroidRuntime(9581): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.funwithmath/com.example.funwithmath.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ComponentName android.content.Context.startService(android.content.Intent)' on a null object reference 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.app.ActivityThread.access$800(ActivityThread.java:151) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.os.Handler.dispatchMessage(Handler.java:102) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.os.Looper.loop(Looper.java:135) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.app.ActivityThread.main(ActivityThread.java:5254) 04-13 22:30:15.190: E/AndroidRuntime(9581): at java.lang.reflect.Method.invoke(Native Method) 04-13 22:30:15.190: E/AndroidRuntime(9581): at java.lang.reflect.Method.invoke(Method.java:372) 04-13 22:30:15.190: E/AndroidRuntime(9581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 04-13 22:30:15.190: E/AndroidRuntime(9581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 04-13 22:30:15.190: E/AndroidRuntime(9581): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.ComponentName android.content.Context.startService(android.content.Intent)' on a null object reference 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.content.ContextWrapper.startService(ContextWrapper.java:516) 04-13 22:30:15.190: E/AndroidRuntime(9581): at com.example.funwithmath.util.MusicController.startMusic(MusicController.java:25) 04-13 22:30:15.190: E/AndroidRuntime(9581): at com.example.funwithmath.MainActivity.onCreate(MainActivity.java:58) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.app.Activity.performCreate(Activity.java:5990) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 04-13 22:30:15.190: E/AndroidRuntime(9581): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 04-13 22:30:15.190: E/AndroidRuntime(9581): ... 10 more

MainActivity.java

public class MainActivity extends Activity { 

private Button sound; 
private Intent serviceIntent; 
private MusicController musiControl; 
private boolean musicPlayStatus = true; 

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

    sound = (Button) findViewById(R.id.sound); 
    sound.setBackgroundResource(R.drawable.soundopen); 
    serviceIntent = new Intent(this, MusicServer.class); 


    //Control Background Music 
    musiControl = new MusicController (serviceIntent); 
    musiControl.startMusic(); 

MusicController.java

public class MusicController extends Activity { 

private boolean musicPlayStatus = true; 
private Intent serviceIntent; 

public MusicController(Intent serviceIntent) { 
    // TODO Auto-generated constructor stub 

    this.serviceIntent = serviceIntent; 

} 

public void startMusic() { 
    // TODO Auto-generated method stub 
    // Start Music 

    startService(serviceIntent); 
    musicPlayStatus = true; 

} 

答えて

0

でサービスを追加することを忘れないでください。この行では、仮想メソッド「アンドロイドを起動する

試みを知っておくべきことを説明します。 content.ComponentName android.content.Context.startService(android.content.Intent)」NULLオブジェクト参照

に基本的に私あなたのMusicControllerクラスにコンテキストがありません。クラスでは、サービスを開始する場所を知る必要があります。 mainActivityのコンテキストを渡すことでこれを修正できます。

public class MusicController extends Activity { 

private boolean musicPlayStatus = true; 
private Intent serviceIntent; 
private Context context; 

public MusicController(Context c, Intent serviceIntent) { 
    // TODO Auto-generated constructor stub 
    context = c; 
    this.serviceIntent = serviceIntent; 

} 

public void startMusic() { 

    context.startService(serviceIntent); 
    musicPlayStatus = true; 

} 
+0

ありがとうございました。それは私がそれを修正するのに役立ちます。 –

1

は私がサービス開始サービス

をするために

を開始および停止するためにあなたに簡単な方法を表示することができます新しい

MusicController.javaここ

public class MusicController extends Activity { 

private boolean musicPlayStatus = true; 
private Intent serviceIntent; 

public MusicController(Intent serviceIntent) { 
    // TODO Auto-generated constructor stub 

    this.serviceIntent = serviceIntent; 

} 

public void startMusic() { 
    // TODO Auto-generated method stub 
    // Start Music 
serviceIntent= new Intent(MusicController.this, YourService.class); 
    startService(serviceIntent); 
    musicPlayStatus = true; 

} 

を使用してオブジェクトを割り当てるされていません

startService(new Intent(this, MainService.class)); 

停止サービス

stopService(new Intent(this, MainService.class)); 

注: -はあなたのAndroidManifest

<service android:enabled="true" android:name=".MainService" /> 
+0

OPは、 'MusicController'のコンストラクタで' serviceIntent'を設定しています。これを新しい 'Intent'に設定すると、' Intent'をターゲットクラスなしで置き換えるだけです。これは、とにかく現在の例外を引き起こす原因ではありません。 –

+0

申し訳ありません更新された回答を参照 –

+0

これは現在の問題を解決しません。それでも 'NullPointerException'がスローされます。 –

関連する問題