Pew*_*ter 19 service android android-intent intentservice
我试图将结果从a返回IntentSerivce到mainactivity使用intent,但我无法让它工作.在IntentService收到该活动的意图没有问题,请问这件事,并得到一个JSONstring.现在唯一的问题是将此String发送回活动.
这是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;
Run Code Online (Sandbox Code Playgroud)
这是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);
}
Run Code Online (Sandbox Code Playgroud)
显然startActivity不起作用,但还有什么可以使用?(我宁愿不使用广播接收器).关心Peter 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");
}
}
};
Run Code Online (Sandbox Code Playgroud)
这段代码是onCreate:
LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVE_JSON);
bManager.registerReceiver(RTReceiver, intentFilter);
Run Code Online (Sandbox Code Playgroud)
这是方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
logcat中的最后一个跟踪是 System.out.println("action: "+RTRetur.getAction()");
-action:
student.kau.RECEIVE_JSON
Run Code Online (Sandbox Code Playgroud)
tol*_*gap 52
为此,你可以使用BroadcastReceiver你的Activity.
这里是一个很好的例子我使用来之间连续地进行通信Service<> Activity使用BroadcastReceivers.
这是 Service <> Activity之间另一个很好的通信示例.它使用Messenger和IncomingHandler.
我将为您的案例做一个简单的例子.
这是您的Activity的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;
Run Code Online (Sandbox Code Playgroud)
在你onCreate()的活动中
bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVE_JSON);
bManager.registerReceiver(bReceiver, intentFilter);
Run Code Online (Sandbox Code Playgroud)
在您onDestroy()的活动中,请确保取消注册broadcastReceiver.
bManager.unregisterReceiver(bReceiver);
Run Code Online (Sandbox Code Playgroud)
最后,在你的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);
Run Code Online (Sandbox Code Playgroud)
并且您的Activity将在其中接收该json作为额外的意图
| 归档时间: |
|
| 查看次数: |
40427 次 |
| 最近记录: |