2012-08-09 18 views
17

dentro de mi actividad principal que tengo el siguiente código:Usando putExtra para pasar valores al servicio de la intención

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

Actualmente, esto sólo envía una intención de la NetworkService, que se maneja de la siguiente manera (truncada):

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

Ahora, lo que tengo que averiguar, es cómo pasar esas usernameText y passwordText valores a través de la NetworkService en el 'XXX', sino también dentro del NetworkService, tengo la intención (sin doble sentido), para que se manejar múltiples int en varios lugares, uno de un inicio de sesión, uno de recuperar información sobre los usuarios que usan el token de inicio de sesión, por ejemplo. donde todas las redes estarán contenidas. Me dijeron que esta era la mejor práctica dentro de las aplicaciones de Android, para mantener la red separada.

Mi pregunta es: ¿Cuál es la mejor manera de enviar esas dos variables a la NetworkService y también cómo, dentro del onHandleIntent del NetworkService, puedo separar el código sólo para hacer lo que estoy pidiendo a (inicio de sesión, obtener información del usuario, buscar datos de ubicación, etc.)?

Lo siento si la respuesta es simple, pero soy muy nuevo en la programación de aplicaciones.

Gracias

Respuesta

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

Luego, en su IntentService:

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

IntentServices están diseñados para manejar varias peticiones que se le envían. En otras palabras, si continúa enviando intenciones usando startService(intent), su NetworkService seguirá recibiendo su método onHandleIntent llamado. Debajo del capó, tiene una cola de intentos que funcionará hasta que se termine. Por lo tanto, si continúa enviando intenciones de la manera en que se encuentra actualmente, pero con ciertos indicadores configurados a través de los métodos putExtra, entonces puede detectar qué debe hacer su NetworkService y actuar de forma adecuada. p.ej. establezca un valor booleano adicional a su intención llamada login, en su servicio interno, busque esa bandera configurada a través del intent.getBooleanExtra("login"). Si es verdadero, haga sus cosas de inicio de sesión, de lo contrario, busque otras banderas que configure.

+3

Gracias, esto es lo que busco, estoy asignando a cada uno de los métodos un valor int 'intentID' a través de putExtra, que busco dentro del dispositivo en mano, para decidir qué parte del intento ejecutar. El único problema que estoy teniendo es que el código se cuelga en i.putExtra ("username", usernameText.getText(). ToString()); así que estoy intentando depurar eso ahora. – Seb

+2

¿Cuál es la solución si uso 'IntentService' con' PendingIntent.getService() '? –

+0

Gracias por la respuesta simple –

5

1. Para enviar usernameText y passwordText a NetworkService hacer esto ....

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. Para reciben los datos en NetworkService hacer esto. ...

Intent intent = getIntent(); 
    String userName = intent.getExtras().getString("username"); 
    String password = intent.getExtras().getString("password"); 
+2

¿Por qué no llamar a 'intent.getStringExtra' ?? –

Cuestiones relacionadas