从安卓设备发布信息到PHP服务器

3

我正在编写一款Android应用程序,其中一部分需要使用GPS获取经度/纬度。这些值将会被发送到我运行的PHP服务器上。我使用的发布函数如下:

public void doAll() {

Double locLat, locLon;
    try {
    locLat = locManager.getLastKnownLocation(locProvider).getLatitude();
    locLon = locManager.getLastKnownLocation(locProvider).getLongitude();
    } catch (NullPointerException e) {
    locLat = -1.0;
    locLon = -1.0;
    }
try {

    HttpClient client = new DefaultHttpClient();
    //we put all the parameters in the URL itself
    HttpPost request = new HttpPost("http://fatalatour.com/database.php?function=get_all&latitude="+Double.toString(locLat)+"&longitude="+Double.toString(locLon));

    ResponseHandler <String> responseHandler = new BasicResponseHandler();

   //List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
   //nameValuePairs.add(new BasicNameValuePair("latitude", Double.toString(locLat)));
   //nameValuePairs.add(new BasicNameValuePair("longitude", Double.toString(locLon)));
   //request.setEntity(new UrlEncodedFormEntity(nameValuePairs));

   String response = client.execute(request, responseHandler);
   Log.i("HOMI_RESPONSE", response.toString());

}

除此之外,还有其他代码,但我认为这是影响locLat和locLon发布的所有内容。

对于服务器端,我有:

function get_all() {
            $lat = trim($_GET['latitude']);
            $lon = trim($_GET['longitude']);
            // DEBUG
            $f = fopen('debug.log', 'a');
            fprintf($f, 'get_all: '.print_r($_REQUEST, true)."\n");
            $result = mysql_query("SELECT * FROM homi_table");

            $num = 0; //# of homicides

            while ($row = mysql_fetch_assoc($result)) {
                    $d = distance($row['latitude'], $row['longitude'], $lat, $lon, "K");
                    if ($d < 100) { //number to change for distance filter
                            $num += 1;
        echo "fatality:".$row['slug']."~".strtoupper($row['name']).", Age ".$row['age']."\n".$row['date']."\nhttp://projects.latimes.com/homicide/post/".$row['slug']."~".$row['latitude']."~".$row['longitude'];


                            // GH: limiting the number of results to 100
                            if ($num == 100) {
                                    break;
                            }
                    }
            };
            echo $num;
            fprintf($f, "get_all: returning: ".$num."\n");
    }

目前问题似乎在于处理$lat和$lon。当我在PHP中为它们每个都硬编码一个静态数字时,应用程序可以正常工作,但是当我将它们保留为变量(应该这样做)时,它就会失败。非常感谢任何帮助!

2个回答

1
在Android应用程序中,你使用POST请求,在PHP中你读取GET参数。我脑子里没有别的想法了。

你不应该在PHP中使用GET来访问Android代码中原本应该POST的内容吗?如果这是一个幼稚的问题,我很抱歉。 - Sigterm
不,不,你可以使用GET。在Android应用程序中使用HttpGet,而不是HttpPost。 - Piotr Kochański
哦,太好了,谢谢!我在Java中修复了那部分,然后就大功告成了!它现在正如预期地工作 :) - Sigterm

0

你构建的URL看起来像是HTTP Get请求,而不是Post请求。Post请求应该将数据发布在请求正文中。

如果你不介意参数暴露在URL中,我建议你只需在Android代码中将HTTPPost更改为HTTPGet。如果你不想让这些东西出现在URL中,你需要稍微修改一下Android post(类似于你注释掉的代码),并更改php代码以访问$_POST变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接