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

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

现在,我需要弄清楚的是如何将那些usernameTextpasswordText值传递给NetworkService到“XXX”中,但是在NetworkService中,我也打算(无双关),使其能够处理来自各种不同的多个意图例如,一个来自登录名,一个来自使用登录 token 检索有关用户的某些信息。
在这里将包含我所有的网络。我被告知这是android应用程序中的最佳做法,以保持网络独立。

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

抱歉,答案很简单,但是对于应用程序编程我还是很陌生。

谢谢

最佳答案

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应该做什么并采取适当的措施。例如为您的意图设置一个 boolean 值login,在intentservice中查找通过intent.getBooleanExtra("login")设置的标志。如果为true,请执行登录操作,否则查找您设置的其他标志。

08-28 18:49