Reputation: 51
I'm trying to send GPS data from android phone to server. Its not working though. I've attached my code snippet here. Kindly check it and help me with this!
public void onNmeaReceived(long timestamp, String nmea)
{
String url = "http://www.xyz.com/server.php?DATA=";
String params = URLEncoder.encode(nmea);
url = url+params;
HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try {
HttpResponse httpResponse = client.execute(httppost);
Log.d("Status", "Request Sent " + httpResponse.getStatusLine().getStatusCode());
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("url", url);
}
My output is like this! Its getting encoded and sent.
08-03 22:37:01.062: DEBUG/url(15874): http://www.xyz.com/server.php?DATA=%24GPGSV%2C4%2C1%2C16%2C03%2C14%2C147%2C%2C06%2C05%2C140%2C%2C09%2C05%2C018%2C%2C11%2C73%2C251%2C*7E%0D%0A
08-03 22:37:01.172: DEBUG/url(15874): http://www.xyz.com/server.php?DATA=%24GPGSV%2C4%2C2%2C16%2C14%2C29%2C085%2C%2C17%2C%2C%2C%2C18%2C%2C%2C%2C19%2C48%2C147%2C*72%0D%0A
08-03 22:37:01.312: DEBUG/url(15874): http://www.xyz.com/server.php?DATA=%24GPGSV%2C4%2C3%2C16%2C20%2C14%2C213%2C%2C22%2C29%2C056%2C%2C24%2C57%2C260%2C%2C27%2C07%2C001%2C*75%0D%0A
08-03 22:37:01.432: DEBUG/url(15874): http://www.xyz.com/server.php?DATA=%24GPGSV%2C4%2C4%2C16%2C28%2C32%2C298%2C%2C32%2C36%2C194%2C%2C08%2C%2C%2C%2C31%2C%2C%2C*74%0D%0A
08-03 22:37:01.582: DEBUG/url(15874): http://www.xyz.com/server.php?DATA=%24GPGGA%2C%2C%2C%2C%2C%2C0%2C%2C%2C%2C%2C%2C%2C%2C*66%0D%0A
08-03 22:37:01.702: DEBUG/url(15874): http://www.xyz.com/server.php?DATA=%24GPVTG%2C%2CT%2C%2CM%2C%2CN%2C%2CK%2CN*2C%0D%0A
08-03 22:37:01.848: DEBUG/url(15874): http://www.xyz.com/server.php?DATA=%24GPRMC%2C%2CV%2C%2C%2C%2C%2C%2C%2C%2C%2C%2CN*53%0D%0A
08-03 22:37:01.962: DEBUG/url(15874): http://www.xyz.com/server.php?DATA=%24GPGSA%2CA%2C1%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C*1E%0D%0A
data sent to server is,
http://www.xyz.com/server.php?DATA=%24GPGSA%2CA%2C1%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C%2C*1E%0D%0A
Data is sent to server. the new1.nmea file is created! but when I put 'cat' to see whats inside, the file is empty!
server.php
<?php
//$data = $_POST["DATA"]."";
$data = file_get_contents('php://input');
$Handle = fopen("/xxx/xxx/new1.nmea", "a");
fwrite($Handle, $data);
fclose($Handle);
?>
I need the data in the same format at the server side without any changes(nmea 0183 format). I'm struck! please help me with this!
Upvotes: 0
Views: 1322
Reputation: 3069
If you have to use HTTP to accept your data, you should consider using a "POST" instead of a "GET". NMEA has a lot of characters in it that would be required to be url encoded properly for the request to come through. If you do a "POST" you can specify the "Content Type" and "Charset" to match raw NMEA. I believe that you could just do "Content-Type: text/plain" and pass along the raw POST.
Note that if you went with the raw "POST" method, you would no longer have you $_POST variable in PHP and you would have to read the raw message. You can read a raw post by doing the following:
$data = file_get_contents('php://input');
Client side code:
String url = "http://www.xyz.com/server.php";
HttpPost post = new HttpPost(url);
StringEntity se = new StringEntity(nmea);
se.setContentType("text/plain");
post.setEntity(se);
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse = client.execute(post);
Note that your POST will come in the PHP script as a raw post, so you will have to do a little processing to just get the NMEA string out.
Upvotes: 0
Reputation: 51
its working guys!
public void onNmeaReceived(long timestamp, String nmea)
{
String params;
try {
params = URLEncoder.encode(nmea, "UTF-8");
Log.d("executing", params);
String url = "http://www.xyz.com/server.php?DATA="+params;
//url = url+params;
HttpPost httppost = new HttpPost(url);
HttpClient client = new DefaultHttpClient();
try {
HttpResponse httpResponse = client.execute(httppost);
Log.d("Status", "Request Sent " + httpResponse.getStatusLine().getStatusCode());
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
<?php
$data = $_GET["DATA"]."";
echo urldecode($data);
//$data = file_get_contents('php://input');
$Handle = fopen("xxx/xxx/test.nmea", "a");
fwrite($Handle, $data);
fclose($Handle);
flush($Handle);
?>
Upvotes: 0
Reputation: 7708
Why do you need both NMEA and LocationUpdates, either of them will do. When you say you want GPS information do you want NMEA string or just the location attributes like accuracy, time, speed, etc?
You should perform your HTTP request in NMEAListener as you are trying to send NMEA string and not in LocationListener? What was the logic for this in first place, am curious.
Upvotes: 1