Отправка данных 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 создан! но когда я помещаю '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 ответа

Решение

Его работающие ребята!

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

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

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

Если вам нужно использовать 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.

Другие вопросы по тегам