将数据从 Android 发送到 PHP 服务器

Posted

技术标签:

【中文标题】将数据从 Android 发送到 PHP 服务器【英文标题】:Sending data from Android to a PHP server 【发布时间】:2012-07-19 12:12:02 【问题描述】:

我在 android 中有一个应用程序,我想通过 url (like=..mydata.php?lat=76867&long=87979) 将 android 手机的纬度和经度发送到 Web PHP 服务器。如果点击此 url,我将使用 php 代码将数据保存在数据库中。

我没有得到的是如何通过我的android手机将纬度和经度发送到PHP服务器。

【问题讨论】:

【参考方案1】:

基于@DarkXphenomenon 的回答,确保您拥有正确的权限。

// to retrieve location
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
// to retrieve location
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
// to send data
<uses-permission android:name="android.permission.INTERNET"/>

然后在您的 java 类中,您可以使用此代码将数据发送到 php 文件。确保捕获任何异常。

String and = "&";

                    HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://my site.com/gpsdata.php?imei="+imei+and+"lat="+lat+and+"lng="+lng+and+"spd="+speed);

        try 

             httpclient.execute(httppost);
            Log.d(TAG, "Data sent!");
         catch (ClientProtocolException e) 
            Toast.makeText(this,
                    "Client protokol exception ", Toast.LENGTH_LONG).show();
         catch (IOException e) 
            Toast.makeText(this,
                    "IO exception " + e.getMessage(), Toast.LENGTH_LONG)
                    .show();
        

您还需要确保您的位置变量(例如纬度或经度)是字符串,否则您会收到一些意外错误。通常位置变量是双精度或浮点数。要将双精度数转换为字符串,请执行

String Longitude = Double.toString(doubleToConvertToString);

同样是浮点数到字符串

String Longitude = Float.toString(doubleToConvertToString);

【讨论】:

【参考方案2】:

清单需要包含

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />`

更新: UI 线程中不再允许网络连接。然后,您需要发出一个包含在 AsyncTask&lt;&gt; 中的 HTTP get,它将由您的 PHP 后端解析和解释。 一个例子是http://developer.android.com/training/basics/network-ops/connecting.html

【讨论】:

我已经有了纬度和经度,但在第二个答案中'在单独的线程上运行'很重要?以及在哪里写我的网址?? 查看编辑后的答案。如果您不希望 HTTP 请求和响应阻塞主线程,则需要在不同的线程上运行它。 对不起,我没有得到数据库中的值。 尝试读取字符串response,检查网页是否正确响应。另外,请检查您的清单以查看 &lt;uses-permission android:name="android.permission.INTERNET" /&gt; 是否存在。 你为什么要保护这个问题?看起来它真的不需要它:)

以上是关于将数据从 Android 发送到 PHP 服务器的主要内容,如果未能解决你的问题,请参考以下文章

通过 JSON 将数据从 android 发送到服务器

Android JSON HttpClient 使用 HttpResponse 将数据发送到 PHP 服务器

将数据从 android Studio 发送到网站(php)

将 POST 数据从 Android 应用程序发送到 PHP MySQL

Android:如何在不使用 PHP 或任何网络服务的情况下将数据发送到远程数据库?

如何在不刷新页面的情况下将数据从 Android 发送到 PHP 并显示