2016-11-30 36 views
0

putExtraが存在するかどうかを確認する方法は?

Activity 1 --send data--> Service1 
          ^
          | 
Open app-------------------- 
          ^
          | 
Activity 2------------------ 

を次のように私はonStartCommand()に復帰して実行しているバックグラウンドサービスであるアクティビティ1は、サービス1 1.サービスにデータを送信することを意味しSTART_STICKYある図を持っています。現在、私はputExtra()関数を使用してデータを交換しています。そして、私はgetExtraデータの手順以下のようにするサービスで:Service 1

String data=null; 
if(intent.hasExtra("data")){ 
    Bundle bundle = intent.getExtras(); 
    if(!bundle.getString("data").equals(null)){ 
     data= bundle.getString("data"); 
    } 
    } 
    else 
     data="0"; 

のonStartCommand(でActivity 1

Intent start_service = new Intent(getContext(), ConnectService.class); 
start_service.putExtra("data", "123"); 
getContext().startService(start_service); 

が)私はdataが設定されているかどうかを確認するhasExtra機能を使用したり、ない。私の目的では、ケース1はサービス1がActivity 1からデータを受信できることです。ケース2では、アクティビティ1から開始しないと、たとえば実行中のすべてのアプリをクリーンアップすると、電話機はSTART_STICKYのため自動的にサービス1を開き、サービス1はデータを「0」に設定します。したがって、私の問題は2番目のケースからです。アプリケーションが存在しているかどうかをチェックできないため、アプリケーションがクラッシュしています。

に起因:java.lang.NullPointerExceptionが:NULLオブジェクト参照

どうでしに 'ブールandroid.content.Intent.hasExtra(java.lang.String)を' 仮想メソッドを呼び出す試み私は問題を解決する?このステップintentの条件

+0

これを試してください。http://stackoverflow.com/questions/38265993/timer-inside-android-service –

+0

ありがとう、場合によっては、サービスはアクティビティ1ではなく他のアクティビティから再起動できます。解決策が解決できません。 – Jame

答えて

4
String data=null; 
if(getIntent()!=null && getIntent().getExtras()!=null){ 
    Bundle bundle = getIntent().getExtras(); 
    if(!bundle.getString("data").equals(null)){ 
     data= bundle.getString("data"); 
    } 
} 
else 
data="0"; 

をありがとうございます。また、コードでは、データのnull値が発生する可能性があります。

String data = null; 
if (intent != null) { 
    data = intent.getStringExtra("data"); 
} 
if (data == null) { 
    data = "0"; 
} 

はまた、あなたがnull値をチェックするequals()を使用しないでください。代わりに次のような何かを行うことができます。常に== nullを代わりに使用してください。

+0

それ以前に使用されましたが、他のアクティビティからサービスを開始するときにエラー '仮想メソッドを呼び出そうとしました 'とandroid.os.Bundle android.content.Intent.getExtras()'がヌルオブジェクト参照で返されました – Jame

+0

これで動作しました。おかげで – Jame

1

場合の変化がnullであるかもしれない気づく、これを試してみてくださいすべて

+0

ありがとうが、それはまた、NULLオブジェクト参照でエラー 'String android.content.Intent.getStringExtra(java.lang.String) 'を取得します。簡単な例を考えてみましょう。アクティビティ1はMAINとLAUNCHERアクティビティではありません。アクティビティ2はメインです。アクティビティー1と2は両方ともサービスを開始できますが、アクティビティー1のみがデータを送信できます。 – Jame

+0

これはどのように可能かわかりません。投稿したすべてのコードをそのコードに置き換える必要があります。 'if(intent!= null)'は、あなたが得る例外を防ぐでしょう。 – tynn

関連する問題