通过 JSON 将数据从 android 发送到服务器
Posted
技术标签:
【中文标题】通过 JSON 将数据从 android 发送到服务器【英文标题】:Send data from android to server via JSON 【发布时间】:2011-09-25 07:26:29 【问题描述】:-
我有 mysql 数据库服务器
我需要通过 JSON 向 MySQL 服务器更新和检索数据
所以,我想知道该怎么做,我对这个示例语句很困惑:
HttpPost httppost = new HttpPost("http://10.0.2.2/city.php");
这意味着我需要编写与 PHP 服务器连接的应用程序 在编写php连接到数据库之前对吗?
【问题讨论】:
【参考方案1】:要将数据发送到服务器,您可以这样做:
private void sendData(ArrayList<NameValuePair> data)
// 1) Connect via HTTP. 2) Encode data. 3) Send data.
try
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new
HttpPost("http://www.blah.com/AddAccelerationData.php");
httppost.setEntity(new UrlEncodedFormEntity(data));
HttpResponse response = httpclient.execute(httppost);
Log.i("postData", response.getStatusLine().toString());
//Could do something better with response.
catch(Exception e)
Log.e("log_tag", "Error: "+e.toString());
然后发送让我们说:
private void sendAccelerationData(String userIDArg, String dateArg, String timeArg,
String timeStamp, String accelX, String accelY, String accelZ)
fileName = "AddAccelerationData.php";
//Add data to be send.
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(7);
nameValuePairs.add(new BasicNameValuePair("userID", userIDArg));
nameValuePairs.add(new BasicNameValuePair("date",dateArg));
nameValuePairs.add(new BasicNameValuePair("time",timeArg));
nameValuePairs.add(new BasicNameValuePair("timeStamp",timeStamp));
nameValuePairs.add(new BasicNameValuePair("accelX",accelX));
nameValuePairs.add(new BasicNameValuePair("accelY",accelY));
nameValuePairs.add(new BasicNameValuePair("accelZ",accelZ));
this.sendData(nameValuePairs);
那么服务器上的 AddAccelerationData.php 文件是:
<?php
/*
* What this file does is it:
* 1) Creates connection to database.
* 2) Retrieve the data being send.
* 3) Add the retrieved data to database 'Data'.
* 4) Close database connection.
*/
require_once '../Connection.php'; //connect to a database/disconnect handler.
require_once '../SendAPI.php'; //deals with sending querys.
$server = new Connection();
$send = new Send();
//Connect to database.
$server->connectDB();
//Retrieve the data.
$userID = $_POST['userID'];
$date = $_POST['date'];
$time = $_POST['time'];
$accelX = $_POST['accelX'];
$accelY = $_POST['accelY'];
$accelZ = $_POST['accelZ'];
//Add data to database 'Data'. //Personal method to query and add to database.
$send->sendAccelerationData($userID, $date, $time, $timeStamp, $accelX, $accelY, $accelZ);
//Disconnect from database.
$server->disconnectDB();
?>
这是我最近使用的一个例子。只是要注意在php文件中。我导入 Connection.php 这只是处理与数据库的连接。因此,只需将其替换为连接到 MYSQL 数据库的代码即可。我还导入了 SendAPI.php(你可以忽略它)这只是我发送数据的类。基本上它包含一些我想使用的查询。比如sendAccelerationData()。基本上类类似于存储过程。
【讨论】:
我得到了 ClientProtocolExcaption 你能帮我弄清楚为什么我得到这个吗?【参考方案2】:您是否需要通过 JSON 进行更新和检索?如果是这种情况,您可能需要编写一些 Web 服务之类的代码(不一定是 PHP,可能是 Java、C# 等)
看这个帖子,好像不能直接从android访问MySql服务器,所以确实可能需要一些Web开发实现JSON/XML中间层来连接android。
线程@*** Android + MySQL using com.mysql.jdbc.Driver
【讨论】:
【参考方案3】:由于 Android 应用程序无法直接连接到 MySQL 服务器 你需要写一种“桥梁”。
更新:@see Femi 的评论
嗯,从技术上讲,它可以:http://developer.android.com/reference/javax/sql/package-summary.html
但出于安全原因,恕我直言,桥梁是强制性选择。
一种最流行的方法是使用 http 协议进行发送 和读取数据。
您的city.php
将包含用于连接和查询
数据库:
<?php
$db = mysql_connect(....);
//query...
echo json_encode($data);
?>
Android 应用将通过您的服务器连接并解析 json 输出。
所以是的,你需要编写服务器端部分和客户端部分(Android)
一个非常有用的视频:http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html
以 PHP 作为桥接器和 Android 通过 http 协议的代码示例:
http://www.helloandroid.com/tutorials/connecting-mysql-database
【讨论】:
实际上,并没有说 Android 应用程序不能直接与 MySQL 对话:请参阅 developer.android.com/reference/java/sql/package-summary.html 和 developer.android.com/reference/javax/sql/package-summary.html。 Android 原生支持 JDBC:您需要添加 MySQL JDBC 驱动程序,但您绝对可以做到。现在,桥对安全类型细节很有用,但你绝对可以在 Android 中使用 JDBC。 @Francesco:所以,我明白我必须编写代码来连接到 PHP 服务器,然后它会在稍后连接到数据库。否则,我无法想象如何将数据从 MySQL 服务器获取到我的应用程序。你能不能给我一些细节。谢谢 @Femi,即使任何直接连接到数据库的客户端类型的软件写得很糟糕,恕我直言,你是完全正确的。必须使用 ssl 连接,否则必须放置嗅探器并与 db 一起玩! @Daisy,刚刚在我的回答中添加了一些有用的链接 实施前的最后一个问题,我应该在我的android应用程序包中安装任何库(.jar)吗?【参考方案4】:您可以使用 JDBC 来实现。我做了一个使用 JDBC 标准 API 与 MYSQL 对话的应用程序。请记住,并非所有连接器都有效,我知道的唯一一个是 mysql-connector-java-3.0.17-ga-bin.jar。
您需要实现一个连接池来加快查询响应时间,因为 JDBC 在建立与服务器的连接时会给 Android 带来一点开销,需要 2 到 3 秒才能启动,但一旦连接运行速度非常快。
【讨论】:
以上是关于通过 JSON 将数据从 android 发送到服务器的主要内容,如果未能解决你的问题,请参考以下文章