2016-05-02 26 views
0

私はeditText要素値を保持する単純なint変数にアクセスする必要があります。値は、自分のActivityクラスにパブリックフィールドとして格納されます。私のサービスでは、私は私の活動のクラスからオブジェクトを作成しました:アクティビティからAndroidのサービスに値を渡す方法は?

CheckActivity check = new CheckActivity(); 

と私はでそれにアクセスしようとしています:

check.getFirstPosition(); 

が、それはゼロを返します。アクティビティの値をサービスに渡すために何をすべきですか?

+1

https://www.youtube .com/watch?v = lnd0oPSzoJgこれは大きな質問です。サービスはバインドまたは開始することができます。同じプロセスでは、別のサービスで片側(サービスまたはアクティビティ)のパブリック静的変数を使用するだけで、アクティビティがインテントとして開始される方法でメッセンジャーまたはAIDLを使用できますCheckActivity check =新しいCheckActivity(); – Pomagranite

+0

静的変数を働かせて、ありがとう。 –

答えて

2

サービスのようなオブジェクトを作成することはできません。私はあなたがJavaの初心者だと思います。 CheckActivity check = new CheckActivity()を実行すると、CheckActivityの新しいインスタンスが作成され、疑いなくゼロが返されます。また、このような活動のオブジェクトをアンドロイドで作成しようとしないでください。

あなたの質問に関しては、放送受信機を介してeditTextの値をサービスに渡すことができます。

thisをご覧ください。

また、サービスを作成する前にeditText値を設定している場合は、単純にintent extraとして渡すこともできます。ブロードキャストの方法を使用することもできます。

あなたの活動

Intent broadcast1 = new Intent("getting_data"); 
     broadcast.putExtra("value", editext.getText()+""); 
     sendBroadcast(broadcast1); 
また

活動ののonCreateであなたの受信機を宣言するには、あなたのサービス

broadcastReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       String action = intent.getAction(); 
       if (action.equalsIgnoreCase("getting_data")) { 
        intent.getStringExtra("value") 
       } 
      } 
     }; 

     IntentFilter intentFilter = new IntentFilter(); 
     // set the custom action 
     intentFilter.addAction("getting_data"); //Action is just a string used to identify the receiver as there can be many in your app so it helps deciding which receiver should receive the intent. 
     // register the receiver 
     registerReceiver(broadcastReceiver, intentFilter); 

、それunregeister onDestroyで

unregisterReceiver(broadcastReceiver); 
+0

ちょっと不思議なことに、サービスクラスの放送受信機を使って、いくつかのアクティビティクラスからeditText値に直接アクセスするにはどうすればいいですか? –

+0

チュートリアルのように、ご使用のサービス内にbroadcastReceiverを宣言してください。それからあなたの活動からあなたの放送受信機のそれに設定された意図を渡します。あなたのサービスでは、あなたの受信機の内部で意図が受信され、そこから値を抽出することができます。その非常に基本的なもの。あなたが役に立つと思ったら、答えをアップホート/受け入れてください。 – varunkr

+0

あなたのために答えを編集しました! – varunkr

0

CheckActivity check = new CheckActivity();

これを絶対にしないでください。代わりにアクティビティを作成するにはIntentを使用してください。

アクティビティからサービスに値を渡すにはどうすればよいですか?

Intentcontext.startService()メソッドを使用して渡すことができます。または、バインドして参照によって値を渡すこともできます。

また、BroadcastReceiverまたはHandlerを使用することもできます。

2

ActivityまたはServiceのように、異なるAndroidコンポーネント間でデータをやりとりするには、インテントを使用する必要があります。その後、

Intent intent = new Intent(this, YourService.class); 
intent.putExtra("your_key_here", <your_value_here>); 

そして、このようなあなたのサービスを開始 -

startService(intent); 

今、あなたは、引数

として渡さ intentを使用する onBind()または onStartCommand()(あなたがあなたのサービスを使用しているかによって異なります)を使用することができます
String editTextValue = intent.getStringExtra("your_key_here"); 

editTextValueどこでも今すぐ使えます。

+0

Intentオブジェクトは、サービスのライフサイクルメソッドで取得できますが、Activityとは異なり、getIntent()メソッドはありません。 – chRyNaN

+0

もちろんです。あなたが正しいです。 –

関連する問題