我正在尝试在本地网络上的Android应用程序与WampServer之间建立通信。
当我想从服务器读取数据时,我已经成功了,但是当我尝试将数据发送到服务器时却遇到了问题。
我正在使用服务来建立通信:
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']。
$_POST['rate']
请告诉我我的代码有什么问题?
最后,我成功将JSONObject发送到服务器。
我将此代码用于android部分:
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部分:
$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)); }
希望它会帮助别人;)