Использование putExtra для передачи значений в службу намерения
в моей основной деятельности у меня есть следующий код:
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', но ТАКЖЕ в NetworkService
, я намерен (без каламбур) предназначенный), чтобы он обрабатывал множество намерений из разных мест, один из логинов, один из которых, например, извлекал некоторую информацию о пользователях, использующих токен входа в систему.
Это где все мои сети будут содержаться. Мне было поручено, что это лучшая практика в приложениях для Android, чтобы поддерживать связь в сети.
Мой вопрос: какой лучший способ отправить эти две переменные в NetworkService
, а также, как в onHandleIntent
NetworkService
отделить код, чтобы делать то, что я прошу это (вход в систему, выбор информации пользователя, выборка данных местоположения и т.д.)?
Извините, если ответ прост, но я очень новичок в программировании приложений.
Спасибо
Ответы
Ответ 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);
}
Затем в вашем 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
, в вашем intentservice найдите этот флаг, который устанавливается через intent.getBooleanExtra("login")
. Если это правда, сделайте свой логин, иначе ищите другие установленные флаги.
Ответ 2
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");