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

时间:2011-06-29 16:08:56

标签: php android mysql json

  1. 我有MySQL数据库服务器
  2. 我需要通过JSON
  3. 更新和检索MySQL服务器的数据

    所以,我想知道如何做到这一点,我对此示例声明非常困惑:

    HttpPost httppost = new HttpPost("http://10.0.2.2/city.php");
    

    这意味着我需要编写与PHP服务器连接的应用程序 在写php之前连接到DB吗?

4 个答案:

答案 0 :(得分:19)

要将数据发送到服务器,您可以执行以下操作:

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 db。我也导入了SendAPI.php(您可以忽略)这只是我发送数据的类。基本上它包含了我想要使用的一些查询。比如sendAccelerationData()。基本上类与存储过程类似。

答案 1 :(得分:2)

您确实需要通过JSON进行更新和检索吗?如果是这种情况,你可能不得不编写一些Web服务代码,(它不一定是在PHP中,可能是Java,C#,等等)

看看这个帖子,看起来你无法直接从android访问MySql服务器,所以你可能需要一些Web开发实现JSON / XML中间层来连接android。

Thread @ StackOverFlow Android + MySQL using com.mysql.jdbc.Driver

答案 2 :(得分:2)

由于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

答案 3 :(得分:1)

您可以使用JDBC来完成。我做了一个使用JDBC标准API与MYSQL交谈的应用程序。请记住,并非所有连接器都能正常工作,我所知道的唯一连接器是mysql-connector-java-3.0.17-ga-bin.jar。

您需要实现一个连接池以加快查询响应时间,因为JDBC在构建与服务器的连接时会给Android带来一点开销,启动时需要2到3秒,但一旦连接工作速度非常快。 / p>