Отправка данных GPS на сервер не работает? - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь отправить данные GPS с телефона Android на сервер. Это не работает, хотя. Я прикрепил свой фрагмент кода здесь. Пожалуйста, проверьте это и помогите мне с этим!

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);          
    }

Мой вывод такой! Это кодируется и отправляется.

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

данные, отправленные на сервер,

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

Данные отправляются на сервер. файл new1.nmea создан! но когда я помещаю 'cat', чтобы посмотреть, что внутри, файл становится пустым!

server.php

<?php 
//$data = $_POST["DATA"].""; 
$data = file_get_contents('php://input');
$Handle = fopen("/xxx/xxx/new1.nmea", "a");
fwrite($Handle, $data);
fclose($Handle);
?>

Мне нужны данные в том же формате на стороне сервера без каких-либо изменений (формат nmea 0183). Я поражен! пожалуйста, помогите мне с этим!

Ответы [ 3 ]

1 голос
/ 03 августа 2011

Зачем вам нужны как NMEA, так и LocationUpdates, подойдет любой из них.Когда вы говорите, что хотите получить информацию GPS, хотите ли вы строку NMEA или просто атрибуты местоположения, такие как точность, время, скорость и т. Д.?

Вы должны выполнить свой HTTP-запрос в NMEAListener, поскольку вы пытаетесь отправить строку NMEA, а нев LocationListener?Какова была логика для этого в первую очередь, мне любопытно.

0 голосов
/ 04 августа 2011

это работающие ребята!

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);
?>
0 голосов
/ 03 августа 2011

Если вам нужно использовать HTTP для принятия ваших данных, вам следует рассмотреть возможность использования «POST» вместо «GET». NMEA содержит много символов, которые должны быть правильно закодированы для выполнения запроса. Если вы делаете «POST», вы можете указать «Content Type» и «Charset», чтобы соответствовать сырому NMEA. Я считаю, что вы можете просто сделать «Content-Type: text / plain» и передать необработанный POST.

Обратите внимание, что если бы вы использовали необработанный метод "POST", у вас больше не было бы переменной $ _POST в PHP, и вам пришлось бы читать необработанное сообщение. Вы можете прочитать необработанный пост, выполнив следующее:

$data = file_get_contents('php://input');

Код на стороне клиента:

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);

Обратите внимание, что ваш POST будет добавлен в скрипт PHP как необработанный пост, поэтому вам придется немного обработать, чтобы просто получить строку NMEA.

...