I am trying to send JSON string {"latitude":53.86897577,"longitude":10.66560449,"formatted":"24.04.2015 16:26:35","route":4}
to the server every 60 seconds but I am always getting the same data. How can I manage it to get always new data in the JSON string. I tried to set timer but without success. I can see the data in the xml file how they are changing but how to realize that with serliziation ?
MainActivity class:
public class MainActivity extends ActionBarActivity {
int route_number;
double pLong;
double pLat;
String formatted;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener ll = new myLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, ll);
enableGPS(lm);
PostData sender = new PostData();
}
class myLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if (location != null) {
pLong = location.getLongitude();
pLat = location.getLatitude();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss",
java.util.Locale.getDefault());
formatted = sdf.format(location.getTime());
}
String jSONString= convertToJSON(pLong, pLat, formatted);
sender.timer(jSONString);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
}
private String convertToJSON(double pLong, double pLat, String formatted) {
//envelop the data in JSON format.
Data d = new Data(pLat, pLong, formatted,route_number);
Gson gson = new GsonBuilder().registerTypeAdapter(Data.class, new DataSerializer()).create();
//return gson.toJson(d);
String a = gson.toJson(d);
// System.out.println(a);
return a;
}
}
PostData class:
public class PostData {
String jSONString;
Handler handler = new Handler();
public PostData() {
super();
}
public String getjSONString() {
return jSONString;
}
public void setjSONString(String jSONString) {
this.jSONString = jSONString;
}
public void timer(String jSONString) {
new Thread(new Runnable() {
@Override
public void run() {
boolean run = true;
while (run) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
new MyAsyncTask().execute(jSONString);
}
}, 30000);
}
}
}).start();
}
class MyAsyncTask extends AsyncTask<String, Integer, Void> {
@Override
protected Void doInBackground(String... params) {
// TODO Auto-generated method stub
System.out.println("The output of : doInBackground " +jSONString);
return null;
}
}
}
}
Passed JSON String with fourth key which I am getting from the inner class BroadcastReceiver in my MainActivity:
{
"latitude":53.86897577,
"longitude":10.66560449,
"formatted":"24.04.2015 16:26:35",
"route":4
}