使用 putExtra 将值传递给意向服务

2022-09-02 02:57:30

在我的主要活动中,我有以下代码:

EditText usernameText;
EditText passwordText;
public void sendLogin (View loginview){
    Intent i = new Intent(this, NetworkService.class);
    startService(i);
}

目前,这只会向网络服务发送一个意向,其处理方式如下(截断):

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

现在,我需要弄清楚的是,如何将这些和值传递到“XXX”中,但也在,我打算(没有双关语)中,让它处理来自不同地方的多个意图,一个来自登录,一个来自使用登录令牌检索用户的一些信息,例如。这是我所有网络将被包含的地方。我被指示这是Android应用程序中的最佳实践,以保持网络的独立性。usernameTextpasswordTextNetworkServiceNetworkService

我的问题是:将这两个变量发送到的最佳方法是什么,以及如何在,在,中分离代码以仅执行我要求它执行的操作(登录,获取用户信息,获取位置数据等)?NetworkServiceonHandleIntentNetworkService

很抱歉,如果答案很简单,但我对应用程序编程非常陌生。

谢谢


答案 1
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);
}

然后在您的意向服务中:

@Override
    protected void onHandleIntent(Intent intent) {
    String username = intent.getStringExtra("username");
    String password = intent.getStringExtra("password");
    ...
}

意向服务旨在处理发送到它的多个请求。换句话说,如果您继续使用 发送意向,您的网络服务将继续调用其方法。在引擎盖下,它有一个意图队列,它将完成直到完成。因此,如果您继续以当前的方式发送意向,但通过这些方法设置了某些标志,那么您可以检测NetworkService应该做什么并采取适当的行动。例如,在意向服务中为意图设置一个名为 的布尔值,查找通过 设置的标志。如果为 true,请执行登录操作,否则查找您设置的其他标志。startService(intent)onHandleIntentputExtraloginintent.getBooleanExtra("login")


答案 2

1.用于发送并执行此操作....usernameTextpasswordTextNetworkService

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

推荐