2011-05-29 9 views
5

Tengo una aplicación en Android que en un hilo diferente de la interfaz de usuario (que implementa Ejecutable)conseguir el contexto de una clase que implementa Ejecutable

recibo algunos datos (datos GPS en forma de latitud y longitud) ya partir de estos datos que

quiere encontrar la dirección correcta pasándolo a un Geocoder ..... después de que la dirección devuelta por Geocoder que almacenarla en una base de datos:

Aquí es cómo hacer estas cosas:

public class Client implemets Runnable{ 


public void run() 
{ 

Geocoder myLocation=new Geocoder(getApllicationContext,Locale.getDefault()); 



} 

} 

pero me da error aquí:

Geocoder myLocation=new Geocoder(getApplicationContext,Locale.getDefault()); 

Ejecutable no sabe quién es getApplicationContext ..... He intentado con "este" lugar pero la misma historia .....

Ahora ¿Cuál es el contexto correcto para pasar al constructor Geocoder ???

Así es como el constructor Geocoder parece:

Geocoder myLocation =new Geocoder(context,locale); 

En mi actividad hago esto:

public class Server2 extends Activity { 


public void onCreate(Bundle icicle) { 


ClientThread_special client = new ClientThread_special(db);//here is where I start thread 


     new Thread(client).start(); 
} 


} 

public class ClientThread_special implements Runnable { 



public ClientThread_special(DBAdapter db){ 

    this.db=db; 
    } 


public void run() 

{ 

Geocoder myLocation=new Geocoder(getApllicationContext,Locale.getDefault()); 


} 


} 

¿Cómo debería modificar el constructor

public ClientThread_special(DBAdapter db){ 

    this.db=db; 

    } 

para tener en mi Runnable el contexto de Server2?

+0

¿Por qué utiliza un hilo? Google recomienda que no se tomen estas medidas: http://developer.android.com/resources/articles/painless-threading.html – Haphazard

+0

@Haphazard que el enlace está muerto. – tony9099

Respuesta

10

Supongo que su clase ClientThreadSpecial es una clase separada (no una clase interna)? Si es así, ¿por qué no pasas el contexto de tu actividad de llamada?

Si se trata de una clase interna, es incluso más fácil. Asumiendo que su ClientThreadSpecial -class es una clase interna de la MyActivity -class (que se extiende de actividad), se puede usar algo como esto:

Geocoder myLocation=new Geocoder(MyActivity.this,Locale.getDefault()); 
+0

No es una clase interna ... y eso fue exactamente lo que hice ... solo me llevó un poco de tiempo hasta que me di cuenta de cómo hacerlo :) – embry

3

No puede usar this porque this se refiere a Runnable. Como Runnable se define en MyActivity (reemplace con su nombre de actividad/servicio), puede consultar MyActivity.this.

+0

Voy a editar mi pregunta ... ¿podrías echarle un vistazo por favor? – embry

Cuestiones relacionadas