Подтвердить что ты не робот

Отправлять намерение от службы к деятельности

Я пытаюсь вернуть результат с IntentSerivce в mainactivity с помощью намерения, но я не могу заставить его работать. IntentService получает намерение от активности без проблем, делает это и получает JSONstring. Теперь единственная проблема заключается в том, чтобы отправить эту строку в действие.

Вот метод в 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;

И вот 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);
}

Очевидно, что startActivity не работает, но что еще нужно использовать? (Я бы предпочел не использовать широковещательный приемник). С уважением Питер Л.

Update

вот как выглядит MainActivity 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");
        }
    }
};

Этот код является onCreate:

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

Это метод:

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);

}

Последний след в logcat - это System.out.println("action: "+RTRetur.getAction()");

-action: 

    student.kau.RECEIVE_JSON
4b9b3361

Ответ 1

Для этого вы можете использовать BroadcastReceiver в Activity.

Вот отличный пример, который я использую для непрерывной связи между Service < > Activity с помощью BroadcastReceivers.

Вот еще один отличный пример связи между Service < > Activity. Он использует Messenger и IncomingHandler.

BroadcastReceiver

Я сделаю краткий пример для вашего дела.

Это ваш BroadcastReceiver для вашей деятельности. Он получит вашу строку:

//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;

В вашей onCreate() активности

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

В вашем onDestroy() активности убедитесь, что вы отменили регистрацию в широковещательном сообщении.

bManager.unregisterReceiver(bReceiver);

И, наконец, в Service onStart() сделайте следующее:

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);

и ваша активность получит намерение с этим json в нем в качестве дополнительного