Отправлять данные от android на сервер через JSON

  1. У меня есть сервер базы данных MySQL
  2. Мне нужно обновлять и извлекать данные на сервер MySQL с помощью JSON

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

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

Это означает, что мне нужно закодировать мое приложение, которое соединяется с сервером PHP, прежде чем писать php для прямого подключения к базе данных?

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

 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()); } } 

затем отправить let say:

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

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

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

Thread @ StackOverFlow Android + MySQL с помощью com.mysql.jdbc.Driver

Поскольку приложение 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

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

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