У меня проблемы с выгрузкой задач из основного метода Activity OnCreate в другой класс для выполнения тяжелой работы.
Когда я пытаюсь вызвать getSystemService из класса не-Activity, возникает исключение.
Любая помощь будет принята с благодарностью :)
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;
}
}
Ответы:
Вам нужно передать свой контекст вашему классу fyl.
Одним из решений является создание конструктора, подобного этому, для вашего
fyl
класса:Итак, в вашем классе деятельности создайте объект fyl в
onCreate
функции следующим образом:источник
lmt
класс не будет выполнен, тогда неfly
будет контекстаgetSysytemService()
принимает толькоString
в качестве параметра. Поэтому вы не можете передать ему контекст. Как мне обойти это? @ HuntBluetoothManager
, иActivityManager
т.д.), также построены таким образом (не обязательно пропусканиеActivity
контекста их конструктора) , и именно поэтому они могут получить доступ компонентов в рамках приложении.Вы можете пойти на это:
источник
ArrayAdapter
.Один из способов обойти это - создать статический класс для экземпляров. Я много использовал в AS3. Я отлично поработал и в разработке под Android.
Config.java
MyApp.java
Затем вы можете получить доступ к контексту или с помощью
Config.context
источник
private static MyApp _context;
public static MyApp getContext() { return _context; }
... в OnCreate:_context = this;
в OnStop:_context = null;
... Использование:MyApp.getContext()
.Я не знаю, поможет ли это, но я сделал это:
источник
Для некоторых неактивных классов, таких как Worker , вы уже получили объект Context в открытом конструкторе.
Вы можете просто использовать это, например, сохранить его в закрытой переменной Context в классе (скажем,
mContext
), а затем, например,источник