インテントを使用して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は機能していませんが、他に何を使用するのですか? (私はむしろ放送受信機を使用しません)。ピーター・Lよろしく.
更新
これは、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");
}
}
};
_
このコードは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
_
このため、BroadcastReceiver
で Activity
を使用できます。
これが私が使用する素晴らしい例ですService
を使用してActivity
<> BroadcastReceivers
の間で継続的に通信するため。
これは別の素晴らしい例です サービス<>アクティビティ間の通信。 Messenger
とIncomingHandler
を使用します。
私はあなたのケースの簡単な例を作ります。
これは、アクティビティの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()
で、broadcastReceiverの登録を解除してください。
_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を含むインテントをエクストラとして受け取ります