Я отправляю объект JSON из моего приложения Android на свой сервер. В моем развитии локальная машина работает нормально. Я получаю данные и декодирую их. Но когда я развернул свой сервер для вычисления движка, я не получаю данные на сервере. Данные отправляются от клиента Android. Я также тестировал JSON из своего браузера, и я получил 200 ответов. Вот фрагменты кода:
// Клиент
// Создаем JSONObject здесь. Это JSON. Я отправляю {"test", "1234"}
JSONObject json = new JSONObject(); json.put("test", args[0]); String postData=json.toString(); // Send POST output. OutputStreamWriter os = new OutputStreamWriter(urlConn.getOutputStream(), "UTF-8"); os.write(postData); Log.e("NOTIFICATION", "Sent"); os.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); String msg=""; String line = ""; while ((line = reader.readLine()) != null) { msg += line; } Log.i("msg=",""+msg);
// Сервер
<?php $json = file_get_contents("php://input"); var_dump($json); //this returns String(0) $decoded = json_decode($json, TRUE); $pasid = $decoded['test']; echo"test if it works"; var_dump($pasid); //returns null
Независимо от того, что я делаю, приложение Android отправляет строку, но на стороне сервера я получаю пустую строку. Я не могу понять, почему.
ваш код очень запутанный, это не очень хороший способ отправить данные из приложения в удаленную базу данных, вы можете сделать это,
сформировать приложение
String uri="But your http URL"; URL url = new URL(uri); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("POST"); con.setDoOutput(true); OutputStreamWriter writer=new OutputStreamWriter(con.getOutputStream()); StringBuilder sb=new StringBuilder(); sb.append("username="+"Naham"); sb.append("password="+"passNaham"); writer.write(sb.toString()); writer.flush();
Знайте простую веб-службу php
$ data = array ("result" => 0, "message" => "Error!"); if ($ _SERVER ['REQUEST_METHOD'] == "POST") { $ user_name = isset ($ _ POST ['username'])? $ _POST ['user_name']: ""; $ user_password = isset ($ _ POST ['user_password'])? $ _POST ['user_password']: ""; // Делаем кое-что здесь $ data = array ("result" => 1, "message" => "welcome"); } else $ data = array ("result" => 0, "message" => "Error!"); / * Выходной заголовок * / header ('Content-type: application / json'); echo json_encode ($ data); ?>
после отправки запроса на сервер вы можете получить сообщение с этими кодами:
<?php $post_body = file_get_contents("php://input"); $json = json_decode($post_body); $pasid = $json->{"test"}; echo $pasid; ?>
Оказывается, проблема вызвана HttpRLConnection. Как и принятый ответ в этом вопросе SO, просто удалите `
urlConnection.setChunkedStreamingMode (0);
где `urlConnection = HttpUrlCooenction ();
`