Отправить данные с Android на сервер через JSON - PullRequest
3 голосов
/ 29 июня 2011
  1. У меня есть сервер базы данных MySQL
  2. Мне нужно обновить и извлечь данные на / с сервера MySQL через JSON

Итак, я хочу знать, как это сделатьи я довольно запутался в этом примере:

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

Это означает, что мне нужно кодировать приложение, которое соединяется с PHP-сервером, прежде чем писать php для соединения с БД, верно?

Ответы [ 4 ]

19 голосов
/ 29 июня 2011

Чтобы отправить данные на сервер, вы можете сделать это:

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 ().В основном класс был похож на класс хранимых процедур.

2 голосов
/ 29 июня 2011

Поскольку приложение Android не может подключиться напрямую к серверу MySQL вам нужно написать что-то вроде "моста".

ОБНОВЛЕНИЕ: @ смотри комментарий Феми

Ну, технически говоря, это может: 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

2 голосов
/ 29 июня 2011

Вам нужно обновить и получить через JSON? Если это так, вам, вероятно, придется кодировать некоторые веб-службы и тому подобное (это не обязательно будет в PHP, может быть Java, C # и т. Д.)

Посмотрите на эту ветку, кажется, что вы никак не можете получить доступ к серверу MySql напрямую с Android, так что, действительно, вам может понадобиться веб-разработка, реализующая промежуточный уровень JSON / XML для соединения с Android.

Thread @ StackOverFlow Android + MySQL с использованием com.mysql.jdbc.Driver

1 голос
/ 02 июля 2011

Вы можете сделать это с помощью JDBC.Я сделал приложение, которое говорило с MYSQL, используя стандартный API JDBC.Имейте в виду, что не все коннекторы работают, я знаю только один mysql-connector-java-3.0.17-ga-bin.jar.

Вам потребуется реализовать пул соединений для скоростивремя отклика на запрос приводит к тому, что при создании соединения с сервером JDBC накладывает небольшие накладные расходы на Android, для его запуска требуется от 2 до 3 секунд, но после подключения он работает очень быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...