String vom service zum activity

  • Antworten:5
Sven
  • Forum-Beiträge: 8

22.10.2011, 20:41:43 via Website

Hallo Community,

ich beschäftige mich erst kurz mit android und der app Entwicklung, auch sind meine Java-Kenntnisse nicht so gut ( Ist schon einige Jahre her ) trotzdem will ich mich mit beschäftigen, finde es einfach sehr interessant.

Ich arbeite an einer kleinen app für mich die einen service hat, der läuft soweit, und das activity dazu, läuft auch. Jetzt möchte ich gerne vom service einen String an die activity übergeben haben und ein TextView in der activity aktualisieren. Kann mir dazu jemand von Euch einen Tipp geben wie das genau funktioniert? Ich glaube das habe ich nocht nicht gerafft. Danke Euch!

1public class aktualisieren extends Service{
2 private Timer timer = new Timer();
3
4 public void onCreate() {
5
6 super.onCreate();
7 Log.d("aktualisieren-service: ", "start successfully.");
8 startservice();
9 }
10
11 public void startservice() {
12
13 timer.scheduleAtFixedRate( new TimerTask() {
14
15 public void run() {
16 work();
17 }
18
19 }, 0, 10000);
20
21 ; }
22
23 private void stopservice() {
24
25 if (timer != null){
26 Log.d("aktualisieren-service: ", "stop successfully.");
27 timer.cancel();
28
29 }
30 }
31
32 @Override
33 public IBinder onBind(Intent intent) {
34 return null;
35 }
36
37 public String work(){
38 String R = "";
39 // Hier passiert noch einiges mehr.
40Der String der zurück zur activity soll ist dann in "R".
41 return R;
42 }
43
44}

— geändert am 22.10.2011, 20:42:43

Antworten
Sven
  • Forum-Beiträge: 8

24.10.2011, 22:27:10 via Website

Ja das habe ich gelesen aber das war zu dem Zeitpunkt nicht ganz das was ich gesucht habe, mittlerweile aber doch.

Nun versuche ich das irgendwie gebacken zu kommen, hier mal der Versuch:

1import java.io.IOException;
2import java.io.InputStream;
3import java.io.OutputStream;
4import java.util.Timer;
5import java.util.TimerTask;
6
7import android.app.Service;
8import android.content.Intent;
9import android.os.Binder;
10import android.os.IBinder;
11import android.os.Looper;
12import android.util.Log;
13import ping.check.zubehoer;
14
15public class service extends Service {
16 private Timer timer = new Timer();
17 private static final long UPDATE_INTERVAL = 15000;
18 private final IBinder mybinder = new MyBinder();
19 private String c;
20 private String y;
21 private String value;
22
23 public void onCreate() {
24 super.onCreate();
25 pollForUpdates();
26 }
27
28 private void pollForUpdates() {
29 timer.scheduleAtFixedRate(new TimerTask() {
30 @Override
31 public void run() {
32 // Hier noch mehr Code!
33value = "String...";
34 }
35 }, 0, UPDATE_INTERVAL);
36 Log.d(getClass().getSimpleName(), "Timer started.");
37 }
38
39 @Override
40 public void onDestroy() {
41 super.onDestroy();
42 if (timer != null) {
43 timer.cancel();
44 }
45 Log.d(getClass().getSimpleName(), "Timer stopped.");
46 }
47
48 @Override
49 public IBinder onBind(Intent arg0) {
50 return mybinder;
51 }
52
53 public class MyBinder extends Binder {
54 service getService() {
55 return service.this;
56 }
57 }
58
59 public String geterg() {
60 Log.d("ERG: ",value);
61 return value;
62 }

Als Fehler in LogCat erhalte ich folgendes:

Can´t create Handler inside Thread that has not called Looper.prepare();
Warum Looper? Ich nutze doch den Timer. Kann mir hierzu jemand bitte helfen? Danke

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

24.10.2011, 22:29:58 via App

Hey,
ich würde dir raten, das (wie im anderen Thread beschrieben) mit einem BroadcastReceiver zu machen.
Lg Ansgar

Antworten
Sven
  • Forum-Beiträge: 8

25.10.2011, 08:44:45 via Website

Würde mit einem BroadcastReceiver mein Problem nicht erhalten bleiben?

*verwirrtbin*

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

25.10.2011, 10:29:57 via App

Nein, Du versendest den Broadcast an interessierte Activities. Wenn die Activities aktiv sind --> Ok, wenn nicht werden die Broadcasts geschlabbert.

Antworten