Отправка данных GPS на сервер не работает?

Я пытаюсь отправить данные 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 создан! но когда я ставлю «кошку», чтобы посмотреть, что внутри, файл пуст!

сервер.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). Я поражен! Пожалуйста, помогите мне с этим!


person adam    schedule 03.08.2011    source источник
comment
Эй, адам, вот почему ты пишешь эти две строчки, не может ли быть одна из них? Я не уверен в этом, но я думаю, что это должен быть один из них, а не оба. Извините, если я ошибаюсь. LM.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000,0,LL); LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0,LL);   -  person anddev    schedule 03.08.2011
comment
@Mansi: вы можете иметь и то, и другое, если хотите получать обновления местоположения от GPS и NETwork, в этом нет ничего плохого.   -  person PravinCG    schedule 03.08.2011


Ответы (3)


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

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

person PravinCG    schedule 03.08.2011
comment
Я знаю, что я все испортил! Моя единственная цель — отправлять строки NMEA как есть, без внесения каких-либо изменений на сервер. - person adam; 03.08.2011
comment
затем выполните операцию http в прослушивателе NMEA и используйте POST вместо get с кодировкой UTF-8. - person PravinCG; 03.08.2011
comment
используется почтовый метод! но все же проблема существует! - person adam; 04.08.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);
?>
person adam    schedule 03.08.2011
comment
Хорошо, что вы опубликовали рабочий код, тем более постарайтесь принять ответ, который помог вам, или хотя бы проголосовать за него, если он был полезен. - person PravinCG; 04.08.2011

Если вам нужно использовать HTTP для приема ваших данных, вам следует рассмотреть возможность использования «POST» вместо «GET». В NMEA есть много символов, которые должны быть правильно закодированы в URL-адресе, чтобы запрос прошел. Если вы выполняете «POST», вы можете указать «Тип контента» и «Кодировку», чтобы они соответствовали необработанному 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.

person feathj    schedule 03.08.2011
comment
Я изменил код... но данные не сохраняются на стороне сервера! помогите мне пожалуйста! проверьте мой измененный код! - person adam; 04.08.2011