当前位置: 首页 > 面试题库 >

使用POST方法和HttpURLConnection将Android的JSON对象发送到PHP服务器

骆利
2023-03-14
问题内容

我正在尝试在本地网络上的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']

请告诉我我的代码有什么问题?


问题答案:

最后,我成功将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));
}

希望它会帮助别人;)



 类似资料:
  • 问题内容: 我在HttpURLConnection和OutputStreamWriter方面挣扎。 代码实际上到达了服务器,因为我确实收到了有效的错误响应。发出了POST请求,但服务器端未收到任何数据。 正确使用此东西的任何提示均受到高度赞赏。 该代码在AsyncTask中 我正在尝试发送的JSON: 我从服务器得到的响应: 我应该得到的回应是: 服务器端PHP脚本: 以及Android Stud

  • 我有POST方法,我想发送一个图像和一个JSON对象。这是我的方法: 我不明白我的问题在哪里,邮递员的要求还是我的方法? 这是我的分类模型:

  • 问题内容: 我想通过齐射库 {“ user_id”:12,“ answers”:{“ 11”:3,“ 12”:4,“ 13”:5}}* 将以下格式的jsonobject发送到服务器 * 如果我想使用 StringRequest, 如何使用POST方法将此JsonObject发送到服务器 问题答案: 您可以使用以下工作示例代码。我测试过了 希望这可以帮助! 更新: 要创建JSONObject作为您的

  • 我必须向服务器发送一个映像(我认为最好的选择是使用HttpURLConnection)并从它接收一个字符串答案。在我读过的不同的文档和web站点中,我研究了这样做的最佳方法是使用多伙伴关系。 1_做它是最好的解决方案吗? 2_我有一个错误,说Android Studio无法解析符号'multipartentity'。我读到,要解决它,我必须下载外部库。哪些是它们,我如何下载它们? 3_为此,我想在

  • 我用这个代码发送后数据到服务器使用android。有人能给我任何想法或您的示例如何发送POST或GET json数据到服务器TOMCAT...!步骤提示: > 创建HttpClient 向给定URL发出POST请求 构建jsonObject 转换JSONObject到JSON到String 设置json为StringEntity 设置http帖子实体 设置一些头来通知服务器内容的类型 对给定URL

  • 问题内容: 我有一个REST Web服务配置如下: 我的Tomcat服务器的配置如下: 我创建的POJO如下所示: } 我创建一个测试客户端以测试createUser方法: 但是我收到以下错误: 奇怪的是,当我将所有内容更改为appliction / xml时,它都能正常工作 知道为什么Json不能为我工作吗? 问题答案: 您正在执行: 这是不对的。您应该将真实的JSON字符串发送到您的服务。 获