Tengo problemas para descargar tareas del método principal Activities OnCreate en otra clase para hacer el trabajo pesado.
Cuando intento llamar a getSystemService desde la clase que no es de Actividad, se produce una excepción.
Cualquier ayuda sería muy apreciada :)
lmt.java:
package com.atClass.lmt;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.location.Location;
public class lmt extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
fyl lfyl = new fyl();
Location location = lfyl.getLocation();
String latLongString = lfyl.updateWithNewLocation(location);
TextView myLocationText = (TextView)findViewById(R.id.myLocationText);
myLocationText.setText("Your current position is:\n" + latLongString);
}
}
fyl.java
package com.atClass.lmt;
import android.app.Activity;
import android.os.Bundle;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
import android.content.Context;
public class fyl {
public Location getLocation(){
LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
String provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
return location;
}
public String updateWithNewLocation(Location location) {
String latLongString;
if (location != null){
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
}else{
latLongString = "No Location";
}
return latLongString;
}
}

Respuestas:
Necesitas pasar tu contexto a tu clase fyl.
Una solución es hacer un constructor como este para tu
fylclase:Entonces, en su clase de actividad, cree el objeto de fyl en una
onCreatefunción como esta:fuente
lmtclase no se ejecuta, entoncesflyno tendrá contextogetSysytemService()solo aceptaStringcomo parámetro. Por lo tanto, no puede pasarle un contexto. ¿Cómo puedo evitar esto? @HuntBluetoothManager,ActivityManageretc.) también se construyen de esa manera (no necesariamente pasando unActivitycontexto a su constructor) y es por eso que pueden acceder a los componentes en el alcance de la aplicación.Puedes ir por esto:
fuente
ArrayAdapter.Una forma de solucionar esto es creando una clase estática para instancias. Lo utilicé mucho en AS3. También me ha funcionado muy bien en el desarrollo de Android.
Config.java
MyApp.java
Luego puede acceder al contexto o mediante
Config.contextfuente
private static MyApp _context;public static MyApp getContext() { return _context; }... en onCreate:_context = this;en onStop:_context = null;... Uso:MyApp.getContext().No sé si esto ayudará, pero hice esto:
fuente
Para algunas clases que no son de actividad, como Worker , ya tienes un objeto Context en el constructor público.
Puede usar eso, por ejemplo, guardarlo en una variable de contexto privada en la clase (por ejemplo,
mContext) y luego, por ejemplofuente