问题
I\'m trying to return the result from an IntentSerivce
to the mainactivity
using an intent, but I can\'t get it to work.
The IntentService
receives the intent from the activity without a problem, does it\'s thing and gets a JSONstring
. Now the only problem left is to send this String back to the activity.
Here is the method in the 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;
And here is the 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);
}
Obviously the startActivity isn\'t working, but what else is there to use? (I would rather not use a broadcast receiver). Regards Peter L.
Update
this it how the MainActivity looks 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\");
}
}
};
This code is the onCreate:
LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVE_JSON);
bManager.registerReceiver(RTReceiver, intentFilter);
This is the method:
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);
}
The last trace in logcat is the System.out.println(\"action: \"+RTRetur.getAction()\");
-action:
student.kau.RECEIVE_JSON
回答1:
For this, you can use a BroadcastReceiver in your Activity
.
Here is a great example I use to communicate continuously between Service
<> Activity
using BroadcastReceivers
.
Here is another great example of communication between Service <> Activity. It uses Messenger
and IncomingHandler
.
BroadcastReceiver
I will make a quick example for your case.
This is your BroadcastReceiver for your Activity. It is going to receive your String:
//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;
In your onCreate()
of the activity
bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVE_JSON);
bManager.registerReceiver(bReceiver, intentFilter);
In your onDestroy()
of the activity, make sure you unregister the broadcastReceiver.
bManager.unregisterReceiver(bReceiver);
And finally, in your Service onStart()
, do this:
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);
and your Activity will receive the intent with that json in it as an extra
来源:https://stackoverflow.com/questions/12997463/send-intent-from-service-to-activity