2017-01-02 8 views
-1

サービスクラスからBundleを使用してメインアクティビティにデータを送信していますが、送信nullです。インテントを使用してサービスからアクティビティへデータを送信中にヌルポインタ例外が発生しました。

サービスクラス

Intent intent = new Intent(LocationService.this, MainActivity.class); 
Bundle b = new Bundle(); 
b.putString("final_address", addressText); 
intent.putExtras(b); 
startActivity(intent); 

主な活動

Intent intentReceived = getIntent(); 
Bundle b = intentReceived.getExtras(); 
address = b.getString("final_address"); 

私はまた、放送メッセージを介してそれを送信しようとしたが、それは以下のtoo.See失敗しました:

サービスクラス

public static final String ADDRESSIDENTIFY = "address_identify"; 
public static final String ADDRESS_PATH = "address_path"; 

Intent intent = new Intent(ADDRESSIDENTIFY); 
intent.putExtra(ADDRESS_PATH, addressText); 
sendBroadcast(intent); 

主な活動

private BroadcastReceiver receiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle bundle = intent.getExtras(); 
     if (bundle != null) { 
      address = bundle.getString(LocationService.ADDRESS_PATH); 

     } 
    } 
}; 

と作成

registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY));

に主な活動でこれを呼び出して、私はあまりにもマニフェストでサービスを宣言しました。

<service 
    android:name="com.gampzz.bhojannearby.LocationService" 
    android:enabled="true"> 
</service> 

どうすればよいですか?私は間違っていますか?

+1

シェアログ猫のクラッシュレポート –

+0

必要''サービス 'から ''活動' 'にデータを取得する ''放送受信機 ''も、マニフェストであなたの ''受信者'を宣言します! –

+0

@SadiqMdAsif私にそうするためのリンクを送ってください。 –

答えて

0

あなたのコードは私の場合にはうまくいきます。あなたが何かを見逃しているかどうかを確認してください。あなたはserviceapplicationの中にのマニフェストで定義していますか?

サービスクラス

public class LocationService extends Service { 

    public static final String ADDRESSIDENTIFY = "address_identify"; 
    public static final String ADDRESS_PATH = "address_path"; 

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

    @Override 
    public void onCreate() { 
     super.onCreate(); 


     Log.e("service", "oncreate"); 


     Intent intent = new Intent(ADDRESSIDENTIFY); 
     intent.putExtra(ADDRESS_PATH, "hello"); 
     sendBroadcast(intent); 
    } 
} 

活動

public class MainActivity extends AppCompatActivity { 

    String address; 

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

     registerReceiver(receiver, new IntentFilter(LocationService.ADDRESSIDENTIFY)); 

     startService(new Intent(this, LocationService.class)); 
    } 


    private BroadcastReceiver receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       address = bundle.getString(LocationService.ADDRESS_PATH); 
       System.out.println("val"+ " = "+ address); 
      } 
     } 
    }; 
} 

mainfest

... 
    <service android:name=".LocationService" 
      android:enabled="true"/> 

</application> 
+0

私は言ったようにデータを送信するためにそのリンクの8番目の記事を使用しました上記の私の質問であなた。サービスクラスからアクティビティクラスにデータを送信したいと思っています。 –

+0

@HimanshuDaswani私の更新された答えをチェックしてください。 – Spartan

+0

ありがとうございましたが、私は何か他のことをしている問題を解決しました。あなたの助けに感謝します。 –

0

必要はありませんトンOこのようLocalBroadcastManagerを使用してブロードキャストを送信します。

private LocalBroadcastManager mBroadcastManger; 

がservcie

mBroadcastManger = LocalBroadcastManager.getInstance(this); 

onCreate()でこれを入れて、このような意図を使用してブロードキャストを送信します

Intent intent = new Intent(ADDRESSIDENTIFY); 
intent.putExtra(ADDRESS_PATH, addressText); 
mBroadcastManger.sendBroadcast(mIntent); 
関連する問題