J'essaie de renvoyer le résultat d'un IntentSerivce
vers le mainactivity
en utilisant une intention, mais je ne peux pas le faire fonctionner. Le IntentService
reçoit l'intention de l'activité sans problème, fait sa chose et obtient un JSONstring
. Maintenant, le seul problème qui reste est de renvoyer cette chaîne à l'activité.
Voici la méthode dans l'activité principale:
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;
Et voici le 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);
}
De toute évidence, startActivity ne fonctionne pas, mais quoi d'autre peut-on utiliser? (Je préfère ne pas utiliser de récepteur de diffusion). Cordialement, Peter L.
Mettre à jour
voici à quoi ressemble MainActivity:
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");
}
}
};
Ce code est le onCreate:
LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVE_JSON);
bManager.registerReceiver(RTReceiver, intentFilter);
Voici la méthode:
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 dernière trace dans logcat est la System.out.println("action: "+RTRetur.getAction()");
-action:
student.kau.RECEIVE_JSON
Pour cela, vous pouvez utiliser un BroadcastReceiver
dans votre Activity
.
Voici un excellent exemple que j'utilise pour communiquer en continu entre Service
<> Activity
en utilisant BroadcastReceivers
.
Voici un autre excellent exemple de communication entre Service <> Activity. Il utilise Messenger
et IncomingHandler
.
Je vais faire un exemple rapide pour votre cas.
Il s'agit de votre BroadcastReceiver pour votre activité. Il va recevoir votre 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;
Dans votre onCreate()
de l'activité
bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVE_JSON);
bManager.registerReceiver(bReceiver, intentFilter);
Dans votre onDestroy()
de l'activité, assurez-vous de désinscrire le broadcastReceiver.
bManager.unregisterReceiver(bReceiver);
Et enfin, dans votre Service onStart()
, faites ceci:
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);
et votre activité recevra l'intention avec ce json en tant que supplément