0

AndroidフォンからサーバーにGPSデータを送信しようとしています。しかし、それは機能していません。コードスニペットをここに添付しました。親切にチェックして、これを手伝ってください!

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」を入れて中身を確認すると、ファイルが空です!

サーバー.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 形式) のデータが必要です。私は打たれました!これで私を助けてください!

4

3 に答える 3

1

NMEAとLocationUpdatesの両方が必要なのはなぜですか。どちらでもかまいません。GPS情報が必要だと言うとき、NMEA文字列が必要ですか、それとも精度、時間、速度などの位置属性だけが必要ですか?

LocationListenerではなくNMEA文字列を送信しようとしているので、NMEAListenerでHTTPリクエストを実行する必要がありますか?そもそもこれの論理は何だったのか、興味があります。

于 2011-08-03T04:39:59.957 に答える
0

その働く人!

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);
?>
于 2011-08-03T23:01:16.233 に答える
0

HTTP を使用してデータを受け入れる必要がある場合は、「GET」ではなく「POST」の使用を検討する必要があります。NMEA には、リクエストが通過するために適切にエンコードされた URL である必要がある多くの文字が含まれています。「POST」を実行すると、生の NMEA と一致するように「コンテンツ タイプ」と「文字セット」を指定できます。「Content-Type: text/plain」を実行して、生の POST を渡すことができると思います。

生の「POST」メソッドを使用すると、PHP で $_POST 変数がなくなり、生のメッセージを読み取る必要があることに注意してください。次のようにして、未加工の投稿を読むことができます。

$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 文字列を取得するために少し処理を行う必要があることに注意してください。

于 2011-08-03T04:34:52.337 に答える