enviar bash de servicio a actividad

Estoy tratando de devolver el resultado de una IntentSerivce a la mainactivity con un bash, pero no puedo hacer que funcione. IntentService recibe la intención de la actividad sin ningún problema, lo hace y obtiene una JSONstring . Ahora el único problema que queda es enviar este String a la actividad.

Aquí está el método en la mainactivity:

 public String RTConn(String query){ System.out.println("Querying Rotten Tomatoes."); Intent rtIntent = new Intent(MainActivity.this, RTConnection.class); rtIntent.putExtra("query", query); bindService(rtIntent, RTConnection, Context.BIND_AUTO_CREATE); startService(rtIntent); String json = getIntent().getStringExtra("json"); return json; 

Y aquí está el IntentService:

 public void onStart(Intent intent, int startId){ System.out.println("intent Received"); String jsonString = rottenTomatoesSearch(intent.getStringExtra("query")); Intent RTRetur = new Intent(RTConnection.this, MainActivity.class); RTRetur.putExtra("json", jsonString); startActivity(RTRetur); } 

Obviamente, startActivity no funciona, pero ¿qué más hay para usar? (Preferiría no usar un receptor de transmisión). Saludos Peter L.

Actualizar

esto es como la actividad principal parece atm:

 public static final String RECEIVE_JSON = "student.kau.RECEIVE_JSON"; private BroadcastReceiver RTReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { System.out.println("broadcast Received: "+intent.getAction()); if(intent.getAction().equals(RECEIVE_JSON)){ System.out.println("JSON Received."); String serviceJsonString = intent.getStringExtra("json"); } } }; 

Este código es el onCreate:

 LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(RECEIVE_JSON); bManager.registerReceiver(RTReceiver, intentFilter); 

Este es el método:

 public void onStart(Intent intent, int startId){ System.out.println("intent Received"); String query = intent.getStringExtra("query"); String jsonString = rottenTomatoesSearch(query); System.out.println("Fetching done"); Intent RTRetur = new Intent(MainActivity.RECEIVE_JSON); System.out.println("action: "+RTRetur.getAction()); RTRetur.putExtra("json", jsonString); sendBroadcast(RTRetur); } 

La última traza en logcat es System.out.println("action: "+RTRetur.getAction()");

 -action: student.kau.RECEIVE_JSON 

Para esto, puede usar un BroadcastReceiver en su Activity .

Este es un gran ejemplo que utilizo para comunicarme continuamente entre Service <> Activity usando BroadcastReceivers .

Aquí hay otro gran ejemplo de comunicación entre Service <> Activity. Utiliza Messenger y IncomingHandler .

Receptor de radiodifusión

Haré un rápido ejemplo para tu caso.

Este es su BroadcastReceiver para su actividad. Va a recibir su cadena:

 //Your activity will respond to this action String public static final String RECEIVE_JSON = "com.your.package.RECEIVE_JSON"; private BroadcastReceiver bReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(RECEIVE_JSON)) { String serviceJsonString = intent.getStringExtra("json"); //Do something with the string } } }; LocalBroadcastManager bManager; 

En su onCreate() de la actividad

 bManager = LocalBroadcastManager.getInstance(this); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(RECEIVE_JSON); bManager.registerReceiver(bReceiver, intentFilter); 

En su onDestroy() de la actividad, asegúrese de anular el registro de broadcastReceiver.

 bManager.unregisterReceiver(bReceiver); 

Y finalmente, en su Service onStart() , haga esto:

 System.out.println("intent Received"); String jsonString = rottenTomatoesSearch(intent.getStringExtra("query")); Intent RTReturn = new Intent(YourActivity.RECEIVE_JSON); RTReturn.putExtra("json", jsonString); LocalBroadcastManager.getInstance(this).sendBroadcast(RTReturn); 

y su actividad recibirá la intención con ese JSON en ella como un extra