2011-08-03 12 views
0

アンドロイド携帯からサーバーにGPSデータを送信しようとしています。それは動作しません。コードスニペットをここに添付しました。親切にそれをチェックし、これで私を助けてください!サーバーへの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'を入れて内部に何が見えるのか、そのファイルは空です!

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は変更せずに、サーバー側で同じ形式(NMEA 0183形式)のデータを必要とします。私は打たれました!これで私を助けてください!

+0

こんにちはアダム、ここでこれらの両方の行を書いているのですが、そのうちの1つではありませんか?私はそれについてはわかっていませんが、私はそれがその両方ではないはずだと思います。私が間違っているとすみませます。 LM.requestLocationUpdates(LocationManager.NETWORK_PROVIDER、1000,0、LL); LM.requestLocationUpdates(LocationManager.GPS_PROVIDER、1000、0、LL); – anddev

+0

@Mansi:GPSからの位置情報の更新とNEtworkの両方に問題がない場合は、両方を持つことができます。 – PravinCG

答えて

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

あなたが作業コードを投稿してくれてよかったです。あなたが助けてくれた回答を受け入れようとしました。 – PravinCG

0

データを受け入れるためにHTTPを使用する必要がある場合は、「GET」ではなく「POST」を使用することを検討する必要があります。 NMEAには、要求が届くように適切にエンコードされていることが要求される多くの文字が含まれています。 "POST"を行う場合は、 "コンテンツタイプ"と "文字セット"を指定して、未処理のNMEAに一致させることができます。私はあなたが単に "Content-Type:text/plain"を行い、生のPOSTに沿って渡すことができると信じています。

生の "POST"メソッドを使用した場合、PHPでは$ _POST変数がなくなり、生のメッセージを読み取る必要があることに注意してください。あなたは、次の操作を行って、生の記事を読むことができます:

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

クライアント側コード:あなたがする必要がありますので、あなたのPOSTは、生のポストとしてPHPスクリプトに来る

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

注意をちょうどNMEAの文字列を取得するための少しの処理。

+0

私はコードを変更しました..しかし、データはサーバー側で保存されていません!私を助けてくださいpls!私の変更されたコードをチェック! – adam

+0

私の答えに私の編集を見てください。 – feathj

1

なぜNMEAとLocationUpdatesの両方が必要なのでしょうか、いずれかが必要になります。 GPS情報がNMEA文字列か、正確さ、時間、スピードなどの位置属性だけを必要としたいと言うときは?

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

+0

私は物事を台無しにしていることを知っている!私の唯一の目標は、サーバーを変更せずにNMEA文字列をそのまま送信することです。 – adam

+0

NMEAリスナーでhttp操作を実行し、UTF-8文字セットでgetの代わりにPOSTを使用します。 – PravinCG

+0

中古ポスト法!それでも問題は残っています! – adam

関連する問題