Editted: LocationService класс:Как добавить значения в базу данных?
public class LocationService extends Service {
private Location mLocation;
private LocationDatabaseHelper mLocationDatabaseHelper;
private LocationModel mLocationModel;
public static final long NOTIFY_INTERVAL = 30 * 1000;
private Handler mHandler = new Handler();
private Timer mTimer = null;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
// cancel if already existed
if(mTimer != null) {
mTimer.cancel();
} else {
// recreate new
mTimer = new Timer();
}
// schedule task
mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
mLocationDatabaseHelper = new LocationDatabaseHelper(this);
}
@Override
public void onDestroy() {
mTimer.cancel();
}
private class TimeDisplayTimerTask extends TimerTask implements LocationListener {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
//Get GPS location
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
mLocation = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, TimeDisplayTimerTask.this);
mLocationModel = LocationModel.getInstance();
mLocationModel.setLng((float)mLocation.getLatitude());
mLocationModel.setLng((float)mLocation.getLongitude());
mLocationDatabaseHelper.insertGPSLogToDatabase(mLocationModel);
}
});
}
LocationModel класс:
public class LocationModel {
private float mLat;
private float mLng;
private String mAddress;
private int mStatus;
private static LocationModel mLocation = null;
private LocationModel(){
}
public static LocationModel getInstance() {
if(mLocation == null) {
mLocation = new LocationModel();
}
return mLocation;
}
public LocationModel(int mStatus,float mLat,
float mLng,String mAddress){
this.mLat = mLat;
this.mLng = mLng;
this.mStatus = mStatus;
}
public float getLat() {
return mLat;
}
public float getLng() {
return mLng;
}
public int getStatus() {
return mStatus;
}
public void setLat(float lat) {
this.mLat = lat;
}
public void setLng(float lng) {
this.mLng = lng;
}
public void setStatus(int status) {
this.mStatus = status;
}
}
Метод для вставки значений в базу данных:
public boolean insertGPSLogToDatabase(LocationModel modelGPS){
ContentValues values = new ContentValues();
values.put("status", modelGPS.getStatus());
values.put("lat", modelGPS.getLat());
values.put("lng",modelGPS.getLng());
myDataBase.insert("locations", null, values);
return true;
}
Интересно, что объект LocationModel я могу положить, что метод? Если я поставлю это:
mLocationModel = new LocationModel(null,mLocation.getLatitude(),
mLocation.getLongitude());
Он покажет ошибку, поскольку статус является int stype и не может быть пустым. Если бы это:
mLocationModel = new LocationModel();
mLocationModel.setLat(mLocation.getLatitude());
mLocationModel.setLng(mLocation.getLongitude());
Я не знаю, правильно ли это или неправильно, потому что я получаю NullPointer в строке «mLocationModel = новый LocationModel();» Я новичок программист, поэтому, пожалуйста, научите меня хорошо. Спасибо!
Editted: Error Log:
07-15 02:35:41.359: E/AndroidRuntime(1554): FATAL EXCEPTION: main
07-15 02:35:41.359: E/AndroidRuntime(1554): java.lang.NullPointerException
07-15 02:35:41.359: E/AndroidRuntime(1554): at com.example.testservice.LocationService$TimeDisplayTimerTask$1.run(LocationService.java:77)
07-15 02:35:41.359: E/AndroidRuntime(1554): at android.os.Handler.handleCallback(Handler.java:615)
07-15 02:35:41.359: E/AndroidRuntime(1554): at android.os.Handler.dispatchMessage(Handler.java:92)
07-15 02:35:41.359: E/AndroidRuntime(1554): at android.os.Looper.loop(Looper.java:137)
07-15 02:35:41.359: E/AndroidRuntime(1554): at android.app.ActivityThread.main(ActivityThread.java:4745)
07-15 02:35:41.359: E/AndroidRuntime(1554): at java.lang.reflect.Method.invokeNative(Native Method)
07-15 02:35:41.359: E/AndroidRuntime(1554): at java.lang.reflect.Method.invoke(Method.java:511)
07-15 02:35:41.359: E/AndroidRuntime(1554): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-15 02:35:41.359: E/AndroidRuntime(1554): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-15 02:35:41.359: E/AndroidRuntime(1554): at dalvik.system.NativeStart.main(Native Method)
Я определил его в OnCreate класса обслуживания –
@Daniel Нугента: Я Editted с полным классом, пожалуйста, посмотрите –
Да, у меня есть. Я добавляю журнал ошибок, пожалуйста, посмотрите, строка 77 - «mLocationModel.setLng ((float) mLocation.getLatitude()); не "mLocationModel = new LocationModel();", моя ошибка: D –