2016-12-31 7 views
0

パーセル可能オブジェクトをアクティビティとサービスの両方に送信します。私の活動では、Androidパーセルオブジェクトはアクティビティに渡されますが、サービスには渡されません

public void onClick(View view) { 
    Intent intent = new Intent(mContext, MainActivity.class); 
    Intent i = new Intent(mContext, OverlayService.class); 
    intent.putExtra(ITEM_KEY, item); 
    i.putExtra(ITEM_KEY, item); 
    mContext.startActivity(intent); 
} 

次に受信する:私が使用して両方に送信するため

DataItem item = getIntent().getExtras().getParcelable(DataItemAdapter.ITEM_KEY); 
    if (item == null) { 
     throw new AssertionError("Null data item received!"); 
    } 

これは完璧に動作します。しかし、私が使用私のサービスのために:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    DataItem item = intent.getExtras().getParcelable(DataItemAdapter.ITEM_KEY); 
    if (item == null) { 
     throw new AssertionError("Null data item received!"); 
    }else{ 
     Toast.makeText(this, "Item received", Toast.LENGTH_SHORT).show(); 
    } 
    return START_STICKY; 
} 

結果がnullpointer例外である:ここで

Unable to start service [email protected] with Intent { cmp=com.madhatter.nat.test/.OverlayService }: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference 
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3314) 
at android.app.ActivityThread.-wrap21(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1565) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6077) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference 
at com.madhatter.nat.test.OverlayService.onStartCommand(OverlayService.java:46) 
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3297) 
at android.app.ActivityThread.-wrap21(ActivityThread.java)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1565)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:154)  
at android.app.ActivityThread.main(ActivityThread.java:6077)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

は私がサービスを開始するために使用するコードです:

public void show(View view) { 
    checkPermissionOverlay(); 
    Intent svc = new Intent(this, OverlayService.class); 
    startService(svc); 
    notificationService(); 
} 

任意のアイデアはどのようなI間違ってる?助けてくれてありがとう。

+0

サービスの開始に使用するコードを表示します。 – riggaroo

+0

私は要求されたコードに追加しました。 –

答えて

1

アクティビティを開始するのと同じ方法でサービスを開始するために、追加情報をインテントに含める必要があります。

public void show(View view) { 
    checkPermissionOverlay(); 
    Intent svc = new Intent(this, OverlayService.class); 
    svc.putExtra(DataItemAdapter.ITEM_KEY, dataItem); 
    startService(svc); 
    notificationService(); 
} 
関連する問題