Tôi có một số tùy chọn được chia sẻ (vĩ độ, kinh độ) mà tôi muốn truy cập từ dịch vụ không được phân loại từ Hoạt động.Các sự cố khi sử dụng SharedPreferences trên Dịch vụ (getPreferences không tồn tại trên dịch vụ)
Cụ thể, khi tôi cố gắng truy cập getPreferences, chức năng này không tồn tại trên một dịch vụ. Mã của tôi được đăng bên dưới
Mục tiêu của tôi ở đây là cho phép VIẾT những tùy chọn chia sẻ này với dịch vụ của tôi. Bất kỳ đề xuất/ví dụ có thể giúp tôi cùng?
public class MyService extends Service implements Runnable {
LocationManager mLocationManager;
Location mLocation;
MyLocationListener mLocationListener;
Location currentLocation = null;
static SharedPreferences settings;
static SharedPreferences.Editor configEditor;
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
settings = this.getPreferences(MODE_WORLD_WRITEABLE);
configEditor = settings.edit();
writeSignalGPS();
}
private void setCurrentLocation(Location loc) {
currentLocation = loc;
}
private void writeSignalGPS() {
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Looper.prepare();
mLocationListener = new MyLocationListener();
mLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 1000, 0, mLocationListener);
Looper.loop();
//Looper.myLooper().quit();
} else {
Toast.makeText(getBaseContext(),
getResources().getString(R.string.gps_signal_not_found),
Toast.LENGTH_LONG).show();
}
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (currentLocation!=null) {
configEditor.putString("mylatitude", ""+currentLocation.getLatitude());
configEditor.putString("mylongitude", ""+currentLocation.getLongitude());
configEditor.commit();
}
}
};
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
if (loc != null) {
Toast.makeText(getBaseContext(),
getResources().getString(R.string.gps_signal_found),
Toast.LENGTH_LONG).show();
setCurrentLocation(loc);
handler.sendEmptyMessage(0);
}
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
tôi nhận được lỗi trên dòng settings = this.getPreferences(MODE_WORLD_WRITEABLE);
bạn có thể giải thích cho tôi thêm một chút về những gì tôi phải thay đổi trên codde của mình để sử dụng trình quản lý tùy chọn không? tôi đang tìm kiếm trên google nhưng tôi không thể tìm thấy thông tin hợp lệ cho tôi – NullPointerException
@ AndroidUser99: Bạn thay thế các cuộc gọi đến 'getPreferences()' bằng một cuộc gọi đến 'PreferenceManager.getDefaultSharedPreferences()'. – CommonsWare
tôi đã thử với điều này: settings = PreferenceManager.getDefaultSharedPreferences (MODE_WORLD_WRITEABLE); nhưng cho tôi lỗi, những gì tôi đang làm sai? – NullPointerException