Send a JSON Object from Android to PHP server with POST method and HttpURLConnection

前端 未结 2 761
夕颜
夕颜 2020-12-03 02:30

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

相关标签:
2条回答
  • 2020-12-03 02:52

    Finally, I success to send a JSONObject to my server.

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

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

    0 讨论(0)
  • 2020-12-03 02:55

    Check with this code:

    public class UniversalNetworkConnection {
    
        public static String postJSONObject(String myurl, JSONObject parameters) {
            HttpURLConnection conn = null;
            try {
                StringBuffer response = null;
                URL url = new URL(myurl);
                conn = (HttpURLConnection) url.openConnection();
                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);
                conn.setRequestProperty("Content-Type", "application/json");
                conn.setDoOutput(true);
                conn.setRequestMethod("POST");
                OutputStream out = new BufferedOutputStream(conn.getOutputStream());
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
                writer.write(parameters.toString());
                writer.close();
                out.close();
                int responseCode = conn.getResponseCode();
                System.out.println("responseCode" + responseCode);
                switch (responseCode) {
                    case 200:
                        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                        String inputLine;
                        response = new StringBuffer();
                        while ((inputLine = in.readLine()) != null) {
                            response.append(inputLine);
                        }
                        in.close();
                        return response.toString();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                if (conn != null) {
                    try {
                        conn.disconnect();
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }
            return null;
        }
    
    }
    

    on PHP Side:

    <?php
        $json = file_get_contents('php://input');
        $obj = json_decode($json);
        print_r($obj);
        print_r("this is a test");
    ?>
    
    0 讨论(0)
提交回复
热议问题