在我的主要活动中,我有以下代码:
EditText usernameText;
EditText passwordText;
public void sendLogin (View loginview){
Intent i = new Intent(this, NetworkService.class);
startService(i);
}
目前,这只是向NetworkService发送一个意图,其处理如下(截断):
public class NetworkService extends IntentService {
public NetworkService() {
super("NetworkService");
}
protected void onHandleIntent(Intent i) {
/* HTTP CONNECTION STUFF */
String login = URLEncoder.encode("Username", "UTF-8") + "=" + URLEncoder.encode("XXX", "UTF-8");
login += "&" + URLEncoder.encode("Password", "UTF-8") + "=" + URLEncoder.encode("XXX", "UTF-8");
}
}
现在,我需要弄清楚的是,如何将usernameText
和passwordText
值传递到NetworkService
到'XXX',但也在{{1}内我打算(没有双关语),让它处理来自不同地方的多个意图,一个来自登录,一个来自使用登录令牌检索用户的一些信息。
这是我的所有网络都将被包含的地方。我被告知这是Android应用程序中的最佳实践,以保持网络分离。
我的问题是:将这两个变量发送到NetworkService
的最佳方式是什么,以及NetworkService
的{{1}}内如何将代码分开到仅做我要求的(登录,获取用户信息,获取位置数据等)?
很抱歉,如果答案很简单,但我对应用程序编程很陌生。
由于
答案 0 :(得分:33)
public void sendLogin (View loginview){
Intent i = new Intent(this, NetworkService.class);
i.putExtra("username", usernameText.getText().toString());
i.putExtra("password", passwordText.getText().toString());
startService(i);
}
然后在你的IntentService中:
@Override
protected void onHandleIntent(Intent intent) {
String username = intent.getStringExtra("username");
String password = intent.getStringExtra("password");
...
}
IntentServices旨在处理发送给它的多个请求。换句话说,如果您继续使用startService(intent)
发送意图,您的NetworkService将继续调用其onHandleIntent
方法。在引擎盖下,它有一个意图队列,它将一直工作直到它完成。因此,如果您按照当前的方式继续发送意图,但通过putExtra
方法设置了某些标志,那么您可以检测您的NetworkService应该做什么并采取适当的行动。例如在您的意图服务中查找通过login
设置的标志,为您的意图intent.getBooleanExtra("login")
设置一个布尔额外值。如果是,请执行登录操作,否则查找您设置的其他标记。
答案 1 :(得分:6)
1。 发送 usernameText
和passwordText
到NetworkService
执行此操作....
Intent i = new Intent(Your_Class_Name.this, NetworkService.class);
i.putExtra("username", usernameText.getText().toString());
i.putExtra("password", passwordText.getText().toString());
startService(i);
2。要在NetworkService
中接收数据,请执行此操作....
Intent intent = getIntent();
String userName = intent.getExtras().getString("username");
String password = intent.getExtras().getString("password");