Подтвердить что ты не робот

Использование 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 отделить код, чтобы делать то, что я прошу это (вход в систему, выбор информации пользователя, выборка данных местоположения и т.д.)?

Извините, если ответ прост, но я очень новичок в программировании приложений.

Спасибо

4b9b3361

Ответ 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");