2012-05-09 2 views
0

Я хочу, чтобы сохранить свое местоположение каждые 10 минут,
У меня есть код, чтобы получить местоположение с GPS
, то я хочу, чтобы сохранить свое местоположение в базе данных каждые 10 минут
это мой код:установить таймер, чтобы сделать что-то в течение 10 минут

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LocationManager locationManager; 
    String context = Context.LOCATION_SERVICE; 
    locationManager = (LocationManager)getSystemService(context); 

    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setCostAllowed(true); 
    criteria.setPowerRequirement(Criteria.POWER_LOW); 
    String provider = locationManager.getBestProvider(criteria, true); 

    updateWithNewLocation(null); 

    locationManager.requestLocationUpdates(provider, (10*60*1000), 10, 
              locationListener); 
} 
private final LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     updateWithNewLocation(location); 
    } 

    public void onProviderDisabled(String provider){ 
     updateWithNewLocation(null); 
    } 

    public void onProviderEnabled(String provider){ } 
    public void onStatusChanged(String provider, int status, 
           Bundle extras){ } 
    }; 
    public void updateWithNewLocation(Location location) { 


     if (location != null) { 
      Dbhelper helper = new Dbhelper(this); 
      final SQLiteDatabase db = helper.getWritableDatabase(); 
      long time = System.currentTimeMillis(); 
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss"); 
      final String curTime = df.format(time); 
      final double lat = location.getLatitude(); 
      final double lng = location.getLongitude(); 
      final double alt = location.getAltitude(); 
      System.out.println(lat); 
      System.out.println(lng); 
      System.out.println(alt); 
      /*db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " + 
      "('"+lng+"','"+lat+"','"+alt+"','"+curTime+"')"); 
      db.close();*/ 
      Timer timer = new Timer(); 
      timer.schedule(new TimerTask(){ 
       @Override 
       public void run(){ 
        db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " + 
          "('"+lng+"','"+lat+"','"+alt+"','"+curTime+"')"); 
        db.close(); 
       } 
      }, 10*60*1000, 10*60*1000); 

      } 
     } 

, но это не работает, чтобы сохранить каждые 10 минут ..
как я могу решить это ?? спасибо :)

ответ

0

ваше местоположение будет на самом деле не сохраняются в базе данных, так как каждый раз, когда ваше местоположение обновляется (через onLocationChanged(Location location)), вы создаете новый экземпляр вашего таймера.

что вам нужно сделать, это привести свою инициализацию timer в ваш метод OnCreate(). затем объявить эти переменные

double lat = location.getLatitude(); 
double lng = location.getLongitude(); 
double alt = location.getAltitude(); 

как глобальные и их обновление в методе onLocationChanged(Location location). Таким образом, всякий раз, когда таймер вызывает постоянство в вашей базе данных, значения lat, lng, alt будут доступны и обновляться на основе вашего последнего местоположения.

UPDATE:

здесь, вы я установил свой код. вы можете попробовать это?

//decalred as global variables 
String curTime; 
double lat; 
double lng; 
double alt; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    LocationManager locationManager; 
    String context = Context.LOCATION_SERVICE; 
    locationManager = (LocationManager)getSystemService(context); 

    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setCostAllowed(true); 
    criteria.setPowerRequirement(Criteria.POWER_LOW); 
    String provider = locationManager.getBestProvider(criteria, true); 

     //Initialize timer 
     Timer timer = new Timer(); 
      timer.schedule(new TimerTask(){ 
       @Override 
       public void run(){ 
        db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " + 
          "('"+lng+"','"+lat+"','"+alt+"','"+curTime+"')"); 
        db.close(); 
       } 
      }, 10*60*1000, 10*60*1000); 


    updateWithNewLocation(null); 

    locationManager.requestLocationUpdates(provider, (10*60*1000), 10, 
              locationListener); 
} 
private final LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     updateWithNewLocation(location); 
    } 

    public void onProviderDisabled(String provider){ 
     updateWithNewLocation(null); 
    } 

    public void onProviderEnabled(String provider){ } 
    public void onStatusChanged(String provider, int status, 
           Bundle extras){ } 
    }; 
    public void updateWithNewLocation(Location location) { 


     if (location != null) { 
      Dbhelper helper = new Dbhelper(this); 
      final SQLiteDatabase db = helper.getWritableDatabase(); 
      long time = System.currentTimeMillis(); 
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss"); 
      curTime = df.format(time); 
      lat = location.getLatitude(); 
      lng = location.getLongitude(); 
      alt = location.getAltitude(); 
      System.out.println(lat); 
      System.out.println(lng); 
      System.out.println(alt); 

     } 

     } 
+0

Я попробую с вашим предложением, но он по-прежнему не работает .. – akubabas

+0

какая часть его не сработала? уделить больше внимания? есть ли у него какие-либо ошибки? – PinoyCoder

+0

через несколько минут я получил ошибку, подобную этой 'FATAL EXCEPTION: Timer-0 java.lang.IllegalStateException: база данных не открыта ' что случилось с моим кодом? Спасибо @stjom – akubabas

Смежные вопросы