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
fyl
clase:Entonces, en su clase de actividad, cree el objeto de fyl en una
onCreate
función como esta:fuente
lmt
clase no se ejecuta, entoncesfly
no tendrá contextogetSysytemService()
solo aceptaString
como parámetro. Por lo tanto, no puede pasarle un contexto. ¿Cómo puedo evitar esto? @HuntBluetoothManager
,ActivityManager
etc.) también se construyen de esa manera (no necesariamente pasando unActivity
contexto 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.context
fuente
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