使用POST方法和HttpURLConnection将Android的JSON对象发送到PHP服务器 [英] Send a JSON Object from Android to PHP server with POST method and HttpURLConnection
问题描述
我正在尝试在本地网络上的Android应用和WampServer之间建立通信.
I'm trying to establish communication between my Android app and my WampServer on local network.
当我想从服务器读取数据时,我已经成功了,但是当我尝试将数据发送到服务器时遇到了问题.
When I want to read data from the server, I have had success, but I have a problem when I try to send data to the server.
我正在使用服务来建立通信:
I'm using an Service to established the communication :
public class SynchronisationService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("http://192.168.37.23/happiness_barometer/php_input.php");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(false);
connection.setRequestMethod("POST");
connection.connect();
OutputStream outputStream = connection.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
JSONObject jsonObject = new JSONObject();
jsonObject.put("rate", 1);
writer.write(URLEncoder.encode(jsonObject.toString(), "UTF-8"));
writer.flush();
writer.close();
} catch (Exception e) {
Log.v("EXCEPTION", e.getMessage());
}
}
}).start();
stopSelf();
return flags;
}
}
还有我的php文件:
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=happiness_barometer;charset=utf8', 'utilisateur', '');
} catch (Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$sql = $bdd->prepare(
'INSERT INTO rates (rate, comment, category, day, month, year, hour, minute, day_of_week, week, rate_number)
VALUES (:rate, :comment, :category, :day, :month, :year, :hour, :minute, :day_of_week, :week, :rate_number)');
if (!empty($_POST['rate'])) {
$sql->execute(array(
'rate' => $_POST['rate'],
'comment' => '',
'category' => 'pro',
'day' => 19,
'month' => 8,
'year' => 2015,
'hour' => 18,
'minute' => 3,
'day_of_week' =>3,
'week' => 33,
'rate_number' => 2));
}
?>
运行我的应用程序时,没有任何内容添加到我的数据库中.
我认为$_POST['rate']
中没有任何内容.
When I run my app, nothing is added to my database.
I think there is nothing in the $_POST['rate']
.
请告诉我我的代码有什么问题?
Please, tell me what is wrong in my code?
推荐答案
最后,我成功将JSONObject发送到服务器.
Finally, I success to send a JSONObject to my server.
我将此代码用于android部分:
I used this code for the android part :
new Thread(new Runnable() {
@Override
public void run() {
OutputStream os = null;
InputStream is = null;
HttpURLConnection conn = null;
try {
//constants
URL url = new URL("http://192.168.43.64/happiness_barometer/php_input.php");
JSONObject jsonObject = new JSONObject();
jsonObject.put("rate", "1");
jsonObject.put("comment", "OK");
jsonObject.put("category", "pro");
jsonObject.put("day", "19");
jsonObject.put("month", "8");
jsonObject.put("year", "2015");
jsonObject.put("hour", "16");
jsonObject.put("minute", "41");
jsonObject.put("day_of_week", "3");
jsonObject.put("week", "34");
jsonObject.put("rate_number", "1");
String message = jsonObject.toString();
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout( 10000 /*milliseconds*/ );
conn.setConnectTimeout( 15000 /* milliseconds */ );
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setFixedLengthStreamingMode(message.getBytes().length);
//make some HTTP header nicety
conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
conn.setRequestProperty("X-Requested-With", "XMLHttpRequest");
//open
conn.connect();
//setup send
os = new BufferedOutputStream(conn.getOutputStream());
os.write(message.getBytes());
//clean up
os.flush();
//do somehting with response
is = conn.getInputStream();
//String contentAsString = readIt(is,len);
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
//clean up
try {
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
conn.disconnect();
}
}
}).start();
这是php部分中的内容:
and this one in the php part :
$json = file_get_contents('php://input');
$obj = json_decode($json);
$rate = $obj->{'rate'};
$comment = $obj->{'comment'};
$category = $obj->{'category'};
$day = $obj->{'day'};
$month = $obj->{'month'};
$year = $obj->{'year'};
$hour = $obj->{'hour'};
$minute = $obj->{'minute'};
$day_of_week = $obj->{'day_of_week'};
$week = $obj->{'week'};
$rate_number = $obj->{'rate_number'};
try
{
$bdd = new PDO('mysql:host=localhost;dbname=happiness_barometer;charset=utf8', 'utilisateur', '');
} catch (Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$sql = $bdd->prepare(
'INSERT INTO rates (rate, comment, category, day, month, year, hour, minute, day_of_week, week, rate_number)
VALUES (:rate, :comment, :category, :day, :month, :year, :hour, :minute, :day_of_week, :week, :rate_number)');
if (!empty($rate)) {
$sql->execute(array(
'rate' => $rate,
'comment' => $comment,
'category' => $category,
'day' => $day,
'month' => $month,
'year' => $year,
'hour' => $hour,
'minute' => $minute,
'day_of_week' => $day_of_week,
'week' => $week,
'rate_number' => $rate_number));
}
希望它会对其他人有所帮助;)
Hope it will help someone else ;)
这篇关于使用POST方法和HttpURLConnection将Android的JSON对象发送到PHP服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!