Service mit "Returnwert"

  • Antworten:3
martin schliefellner
  • Forum-Beiträge: 41

29.02.2012, 20:35:47 via Website

Hallo,

Bei Activities gibt es ja die Möglichkeit vor dem Beenden Extras zu setzen die dann beim Aufrufer in einer Methode geholt werden können.

Ich brauche jetzt soetwas für ein Service:

Ich möchte ein Service aufrufen und solange dieses Läuft einen Progressdialog anzeigen lassen.
Das Service verarbeitet etwas und wenn es fertig ist returned mir das Service zB eine ArrayList oder irgendein anderes Objekt.

Ich hab so ein kleines Buch "Schnelleinstieg Android" und dort hab ich etwas bin bindService gefunden. Ich brauch ja ein Callback im Service von der aufrufenden Activity um dort sagen zu können "bin Fertig" ODER es gibt so eine Methode die automatisch aufgerufen wird wenn sich das Service beendet wie bei den Intents mit startActivityForResult.

Leider startet das Service nicht bei mir es ist immer Null und ich blick daweil noch nicht ganz durch wie das genau mit dem return-Wert funktionieren soll:

Mein Acitivity-Teil:

1ProgressDialog dialog = ProgressDialog.show(ListProductsActivity.this, "",
2 "Connecting...", true);
3 products.getProductlist();
4 String output = products.getOutput();
5 try {
6 ArrayList<String> images = new ArrayList<String>();
7
8 JSONArray j_array = new JSONArray(output);
9 JSONObject j_obj = j_array.getJSONObject(0);
10 images.add(j_obj.getString("image"));
11 Intent imageLoaderIntent = new Intent(this, ImageLoaderService.class);
12 //Bundle input = new Bundle();
13 //input.putStringArrayList("IMAGELIST", images);
14
15 imageService = null;
16 Boolean isBound = true;
17
18
19
20
21 ServiceConnection serviceConnection = new ServiceConnection() {
22
23 @Override
24 public void onServiceDisconnected(ComponentName name) {
25 imageService = null;
26 Log.i("LISTPRODUCTACTIVITY", "Service disconnected");
27 }
28
29 @Override
30 public void onServiceConnected(ComponentName name, IBinder service) {
31 imageService = ((ImageLoaderService.ImageLoaderServiceBinder) service).getService();
32 Log.i("LISTPRODUCTACTIVITY", "Service connected");
33 }
34 };
35 bindService(imageLoaderIntent, serviceConnection, Context.BIND_AUTO_CREATE);

Mein Service:

1public class ImageLoaderService extends Service {
2
3 private ArrayList<String> images = null;
4
5 private ImageLoaderServiceBinder binder = null;
6
7 @Override
8 public IBinder onBind(Intent intent) {
9
10 return binder;
11 }
12
13 @Override
14 public void onCreate() {
15 super.onCreate();
16
17 }
18
19 @Override
20 public void onStart(Intent intent, int startId) {
21 super.onStart(intent, startId);
22 stopService(intent);
23 }
24
25 public class ImageLoaderServiceBinder extends Binder {
26 public ImageLoaderService getService() {
27 return ImageLoaderService.this;
28 }
29 }
30}

Im Moment wollte ich das Service nur mal aufrufen und dann gleich wieder schließen um die Log Meldungen zu sehen.
Leider dürfte er die onServiceConnected Methode nicht aufrufen.

Jemand eine Idee?
Wie kann ich das mit dem Rückgabewert lösen?

mfg

Antworten
martin schliefellner
  • Forum-Beiträge: 41

29.02.2012, 20:59:41 via Website

Ich sehe gerade die OnCreate ruft er auf - wieso die onServiceDisconnected oder onServiceConnected nicht?

oder bin ich überhaupt am falschen weg um einen Returnwert vom service zu erhalten?

lg

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

29.02.2012, 21:14:29 via Website

Ich glaube eigentlich, du bist mit der Herangehensweise, ein Bild von einem Service laden zu lassen, schon auf dem falschen Weg -_- Google mal nach "load image async" oder ähnlichem...

— geändert am 29.02.2012, 21:16:47

Antworten
martin schliefellner
  • Forum-Beiträge: 41

29.02.2012, 21:20:14 via Website

Genauer ist es eine Liste von Bildern aus dem Web die ich dann in einer ListActivity anzeigen lassen möchte, dachte ich kann das in nem Thread laden und dann anzeigen.
Ich schau mal was ich finde ^ ^

Weißt du warum er das connect und disconnect beim Service nicht ausführt ? Bind ruf ich ja auf also müsste er connect aufrufen...

Antworten