2012-04-25 15 views
3

私は通信面に新しいです。アンドロイドアプリケーションから定期的にデータを取得しようとしていました。しかし、どういうわけか、それは動作していません.. PHPスクリプトを書いている私は何かを追加する必要があります..? androidmanifest ..の権限を追加する必要がありますか? また、私のアンドロイドアプリコードを与える..私は自分の場所をクリックすると強制的に閉じます。私はクラスを投稿する緯度と経度フロンのLocationServiceクラスの値を取得しようとしていますアンドロイドアプリケーションからデータを受け取るPHPサーバー

PHPスクリプト

<?php 
echo 'Hello, world!'; 
$json = $_GET['jsonpost'];//get the post you sent... 
$data = json_decode($json); //decode the json formatted string... 
print_r($data); 
$id = $data->id; 
$devid = $data->devid; 
$latitude = $data->latitude; 
$longitude = $data->longitude; 
$service = $data->service; 
$con = mysql_connect("","",""); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
mysql_select_db("a5234826_ul", $con); 
$devid = $_POST['devid']; 
$latitude = $_POST['latitude']; 
$longitude = $_POST['longitude']; 
echo "devid" +$devid; 
echo "latitude" + $latitude; 
echo "longitude" + $longitude; 
$sql = "INSERT INTO `a5234826_ul`.`locations` (
`id` , 
`devid` , 
`latitude` , 
`longitude` , 
`service` 
) 
VALUES (
NULL , '$devid', '$latitude', '$longitude', '$service' 
)"; 
if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
mysql_close($con); 
echo json_encode($variable); 

?> 

LocationService.java

@Override 
public IBinder onBind(Intent intent) { 
// TODO Auto-generated method stub 
return null; 
} 

public int onStartCommand(Intent intent, int flags, int startId) { 
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); 
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "lock"); 
wl.acquire(); 
context = this; 
final String who = intent.getStringExtra("who"); 
final LocationManager locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
final LocationListener listener = new LocationListener(){ 

    // start location changed 

    public void onLocationChanged(Location loc) { 
     double latitude = loc.getLatitude(); 
     double longitude = loc.getLongitude(); 


     // Create a new HttpClient and Post Header 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://.../serverFile.php"); 
     JSONObject json = new JSONObject(); 


     TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
     String devid = telephonyManager.getDeviceId(); 

     String postData = "{\"request\":{\"type\":\"locationinfo\"},\"userinfo\":{\"latitude\":\""+latitude+"\",\"longitude\":\""+longitude+"\",\"devid\":\""+devid+"\"}}"; 




     try { 

      json.put("longitude", longitude);//place each of the strings as you did in postData method 
      json.put("latitude", latitude); 

      json.put("devid", devid); 

      JSONArray postjson=new JSONArray(); 
      postjson.put(json); 
      httppost.setHeader("json",json.toString()); 
      httppost.getParams().setParameter("jsonpost",postjson);  
      HttpResponse response = httpclient.execute(httppost); 

      // for JSON retrieval: 
      if(response != null) 
      { 
      InputStream is = response.getEntity().getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
      } 
      } catch (IOException e) { 
      e.printStackTrace(); 
      } finally { 
      try { 
      is.close(); 
      } catch (IOException e) { 
      e.printStackTrace(); 
      } 
      } 
      String jsonStr = sb.toString(); //take the string you built place in a string 



      JSONObject rec = new JSONObject(jsonStr); 
      String longitudecord = rec.getString("lon"); 
       String latitudecord = rec.getString("lat"); 
      // ... 
      } 
      }catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 




     if (who.equals("me")){ 
      Intent i = new Intent(context.getPackageName()+".LocationReceived"); 
      i.putExtra("lat", String.valueOf(latitude)); 
      i.putExtra("longitude", String.valueOf(longitude)); 
      i.putExtra("accuracy", String.valueOf(loc.getAccuracy())); 
      context.sendBroadcast(i); 
      Notification notif = new Notification(); 
      NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
      notif.tickerText = "Location Found!"; 
      notif.icon = R.drawable.ic_launcher; 
      notif.flags = Notification.FLAG_AUTO_CANCEL; 
      notif.when = System.currentTimeMillis(); 
      Intent notificationIntent = new Intent(context, TestLocatorActivity.class); 
      notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      notificationIntent.putExtra("lat", String.valueOf(latitude)); 
      notificationIntent.putExtra("longitude", String.valueOf(longitude)); 
      notificationIntent.putExtra("accuracy", String.valueOf(loc.getAccuracy())); 
      PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
      notif.setLatestEventInfo(context, "Location Found!", "Click to open.", contentIntent); 
      nm.notify(0, notif); 
     } else { 
      SmsManager smsMan = SmsManager.getDefault(); 
      smsMan.sendTextMessage(who, null, "http://maps.google.com/maps?q=loc:"+latitude+","+longitude, null, null); 
      smsMan.sendTextMessage(who, null, "Latitude: "+latitude+"\nLongitude: "+longitude, null, null); 
     } 
     locMan.removeUpdates(this); 
     try { 
      wl.release(); 
     } catch (Exception e){ 
      e.printStackTrace(); 
     } 
     stopSelf(); 
    } 

    public void onProviderDisabled(String provider){ 


    } 

    public void onProviderEnabled(String provider) { 
     //Log.i(tag, "GPS IS ON"); 
    } 

    public void onStatusChanged(String provider, int status, Bundle extras){ 
     switch(status) { 
      case LocationProvider.OUT_OF_SERVICE: 
      case LocationProvider.TEMPORARILY_UNAVAILABLE: 
      case LocationProvider.AVAILABLE: 
       break; 
     } 
    } }; 


locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener); 
locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener); 

return 2; 
} 

} 

もう一つは、ポスト内のコードですクラス右.. 助けてください。

+0

ブラウザからテストフォームデータを送信して、PHPでエラーが出力されているかどうかを確認しましたか? –

+0

No.Butは、PHPサーバがデータを受信するためのコードです。 –

+0

私に必要なすべての部分があるようです。 –

答えて

1

実際にdbに正しくアクセスしていることを確認するための簡単なスクリプトを作成することをお勧めします。あなただけのブラウザとその方法は、ルールアウトデシベルへの接続/アクセス問題をでスクリプトを実行できます。

<?php 
mysql_connect("localhost","user","pass"); 
mysql_select_db("dbName"); 
$sql=mysql_query("select * from TABLENAME where COLUMNNAME like 'searchparameter'"); 
while($row=mysql_fetch_assoc($sql)) 
$output[]=$row; 
print(json_encode($output)); 
mysql_close(); 
?> 
1

あなたのPHPコードに問題がありますAndroidの側のデータに

String postData = "{\"request\":{\"type\":\"locationinfo\"},\"userinfo\":{\"latitude\":\""+latitude+"\",\"longitude\":\""+longitude+"\",\"deviceid\":\""+deviceid+"\"}}" 

のようなJSON形式として送信ができますが、直接JSONをデコードすることなく、データをフェッチしようとしているため。

それでは、特定の順序でデータをフェッチする最初のあなたのJSONをデコードする必要が

が見@VivekクマーSrivastava氏のように詳細については、下記のリンク

http://php.net/manual/en/function.json-decode.php

+0

コードで私を助けてください...? –

+0

私は実際にそれから多くを理解していませんでした...あなたが私を助けてくださいできますか... –

+0

は、与えられたリンク –

3

は語りました。

あなたが実際にそれをデコードする必要があるPHPの端にあるので、あなたはJSON形式でそれを送信するPOSTDATAを使用して...

コードは次のようになります。

それは多分、より良い、このようなあなたのAndroidのコードでJSONオブジェクトを作成するには... Vivek Kumar Srivastavaとして

は言った:あなたが必要なPHPの端にあるので

あなたはJSON形式でそれを送信するPOSTDATAを使用する場合それを実際に解読する。

以下のようにAndroidコードでJSONオブジェクトを作成する方がよい場合があります。

private postData() throws JSONException{ 
// Create a new HttpClient and Post Header 
HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httppost = new HttpGet("http://.../serverFile.php"); 
JSONObject json = new JSONObject(); 

try {   
    json.put("longitude", longitude);//place each of the strings as you did in postData method 
    json.put("latitude", latitude); 
    json.put("service", service); 
    json.put("devid", devid); 

    JSONArray postjson=new JSONArray(); 
    postjson.put(json); 
    post.setHeader("json",json.toString()); 
    post.getParams().setParameter("jsonpost",postjson);  
    HttpResponse response = httpclient.execute(httppost); 

    // for JSON retrieval: 
    if(response != null) 
    { 
    InputStream is = response.getEntity().getContent(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
StringBuilder sb = new StringBuilder(); 
String line = null; 
try { 
    while ((line = reader.readLine()) != null) { 
    sb.append(line + "\n"); 
    } 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } finally { 
    try { 
    is.close(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    } 
    String jsonStr = sb.toString(); //take the string you built place in a string 



    JSONObject rec = new JSONObject(jsonStr); 
    String longitudecord = rec.getString("lon"); 
     String latitudecord = rec.getString("lat"); 
    // ... 
    } 
    }catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     } 
    } 

PHPコード...

$json = $_SERVER['HTTP_JSON'];//get the post you sent... 
$data = json_decode($json); //decode the json formatted string... 
$longitude = $data->longitude; 
$latitude = $data->latitude; 
$service = $data->service; 
$devid = $data->devid; 

And then continue with your sql from there on. あなたは上記のコードに示すように、バックのAndroidにそれらを読みたい場合は、JSONにそれらをエンコードします...

+0

こんにちは、私はちょうど私のコードでこれを追加する必要があります応答..ありがとう!あなたが与えたPHPの部分とPost.javaへのJavaの部分..? –

+0

私はちょうどあなたのプロフィールを見ました..あなたのやろうとしているのは、あなたがあなたのアプリから取得した緯度と経度をPHPのサイトに投稿することです。あなたも私にそれを手伝ってください... –

+0

はい。私が上記で提案したものを使用しようとしましたか? – inspired

0

私はPOSTデータを受け入れるように任意のPHPコードが表示されません。私はサーバーにデータを送信してデータベースに記録する類似のアプリを書いています。私は通常、POSTのデータを受け入れ、その値を使用するスクリプトを用意しています。 Android SDKでPOSTメソッドを使用して、データをURLに送信する必要があります。これは、JSONを使用してデータを送信し、それをPHPの最後でデコードするより簡単です。サーバーからデータを受け取る必要がある場合は、JSONという値を返し、SDKを使用してAndroidでデコードします。

関連する問題