2016-05-02 4 views
0

Ich muss auf eine einfache int-Variable zugreifen, die einen editText-Elementwert enthält. Der Wert wird als öffentliches Feld in meiner Aktivitätsklasse gespeichert. Auf meinem Dienst, habe ich ein Objekt aus meiner Tätigkeit Klasse:Wie übergibt man einen Wert von Aktivität an einen Dienst in Android?

CheckActivity check = new CheckActivity(); 

und ich versuche, darauf zuzugreifen durch:

check.getFirstPosition(); 

aber es gibt Null zurück. Was muss ich tun, um den Wert einer Aktivität an einen Service zu übergeben?

+1

https://www.youtube .com/watch? v = lnd0oPSzoJg das ist eine große Frage. Ein Service kann im selben Prozess gebunden oder gestartet werden. In diesem Fall können Sie einfach eine öffentliche statische Variable auf beiden Seiten (Service oder Aktivität) in einem separaten Service verwenden. Sie können Messenger oder AIDL verwenden, indem Sie Aktivitäten als Intents starten CheckActivity check = neu CheckActivity(); – Pomagranite

+0

Die Variable funktioniert statisch, danke. –

Antwort

2

Sie können kein Objekt von Ihrem Dienst erstellen. Ich denke du bist neu in Java. Wenn Sie CheckActivity check = new CheckActivity() tun, wird eine neue Instanz Ihrer CheckActivity erstellt und ohne Zweifel wird es Null zurückgeben. Auch sollten Sie nie Objekte von Aktivitäten wie diese auf Android erstellen.

Soweit Ihre Frage betroffen ist, können Sie Ihren editText-Wert über einen Broadcast-Empfänger an Ihren Dienst weitergeben.

Werfen Sie einen Blick auf this.

Auch wenn Sie den Wert editText haben, bevor Sie den Dienst erstellen, können Sie ihn einfach als intent extra übergeben, sonst können Sie den Broadcast-Ansatz verwenden.

In Ihrem Service

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); 

In Ihrer Tätigkeit

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

auch Ihren Empfänger in onCreate der Tätigkeit erklären und unregeister es in onDestroy

unregisterReceiver(broadcastReceiver); 
+0

Nur neugierig, wie kann ich Broadcast Receiver auf Service-Klasse verwenden, um direkt auf editText Wert von einigen Activity-Klasse zugreifen? –

+0

Deklarieren Sie Ihren broadcastReceiver in Ihrem Dienst, wie im Lernprogramm gezeigt. Dann übergeben Sie von Ihrer Aktivität eine Absicht mit einer Aktion, die auf die Ihres Rundfunkempfängers eingestellt ist. In Ihrem Dienst wird die Absicht in Ihrem Empfänger empfangen und Sie können den Wert von dort extrahieren. Es ist sehr einfach. Bitte upvote/akzeptiere die Antwort, wenn du es nützlich findest. – varunkr

+0

hat die Antwort für Sie bearbeitet !! – varunkr

0

CheckActivity check = neu CheckActivity();

Niemals dies tun. Verwenden Sie stattdessen Intent, um eine Aktivität zu erstellen.

Was kann ich tun, um den Wert einer Aktivität an einen Service zu übergeben?

Sie können es über Intent mit context.startService() Methode übergeben. Oder Sie können daran binden und einen Wert über Referenz übergeben. Sie können auch die Verwendung eines BroadcastReceiver oder Handler in Betracht ziehen.

2

Sie müssen beabsichtigen, Daten zwischen verschiedenen Android-Komponenten zu übertragen, sei es Activity oder Service.

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

Und dann Ihren Dienst wie folgt beginnen -

startService(intent); 

Jetzt können Sie verwenden onBind() oder onStartCommand() (hängt davon ab, wie Sie Ihren Dienst verwenden), um die intent als Argument übergeben zu verwenden

String editTextValue = intent.getStringExtra("your_key_here"); 

Sie können jetzt editTextValue überall wo Sie wollen.

+0

Sie können das Intent-Objekt über die Lebenszyklusmethoden des Service abrufen. Im Gegensatz zu Activity verfügt Service jedoch nicht über die Methode getIntent(). – chRyNaN

+0

Ja natürlich. Du hast recht. –

Verwandte Themen