我正在尝试从Android获取GPS坐标并将其发送到MySQL数据库。
一切运行良好,但程序进入无限循环:因为我使用While(true)更新GPS坐标并每隔5秒将其发送到数据库。
如何避免循环并每隔5秒将坐标发送到数据库中。
这是我的代码:
package com.example.gpstracking;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
public class AndroidGPSTrackingActivity extends Activity {
Button btnShowLocation;
GPSTracker gps;
double tmplat=0;
double tmplong=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
while (true)
{
gps = new GPSTracker(AndroidGPSTrackingActivity.this);
if(gps.canGetLocation()){
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
String lat=String.valueOf(latitude);
String lon=String.valueOf(longitude);
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("latitude", lat));
postParameters.add(new BasicNameValuePair("longitude", lon));
try {
CustomHttpClient.executeHttpPost("http://plangsm2012.site40.net/new/check.php", postParameters);
} catch (Exception e) {
}
tmplat=latitude;
tmplong=longitude;
}
else{
gps.showSettingsAlert();
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
在您的locationlistener中,填写您的bean并发布帖子,如下所示:
@Override
public void onLocationChanged(Location arg0) {
myLocation.setLatitude(Double.toString(arg0.getLatitude()));
myLocation.setLongitude(Double.toString(arg0.getLongitude()));
myLocation.setTimestamp(arg0.getTime());
myLocation.setUserId(Secure.ANDROID_ID);
if (new DateTime(arg0.getTime().minusMinutes(5) > new DateTime(oldTime))
postToRemote(myLocation);
}
myLocation是bean,包含纬度,经度,时间戳和设备ID的属性,由于遗留原因而被错误地称为userId。
至于每5秒发布一次,您需要记录发布时间并将其与发布呼叫之前的当前时间进行比较,如上面的if语句所示。
答案 1 :(得分:0)
您可以使用计时器解决此问题。
private void time() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
gps = new GPSTracker(AndroidGPSTrackingActivity.this);
if(gps.canGetLocation()){
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
String lat=String.valueOf(latitude);
String lon=String.valueOf(longitude);
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("latitude", lat));
postParameters.add(new BasicNameValuePair("longitude", lon));
try {
CustomHttpClient.executeHttpPost("http://plangsm2012.site40.net/new/check.php", postParameters);
} catch (Exception e) {
}
tmplat=latitude;
tmplong=longitude;
}
else{
gps.showSettingsAlert();
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 5000); // 5 sec
}
干杯