Android POST HTTP внутри класса AsyncTask не работает

#android #android-studio #http #https

#Android #android-studio #http #https

Вопрос:

Я работал над простым классом с единственной задачей отправить строку из моего приложения в веб-сервис. HTTP Get работает просто отлично, однако Post не

Я использую этот код и не получаю никаких сообщений об ошибках, тем не менее он не работает. Есть какие-нибудь подсказки, почему?

 public class HTTPPostTask extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... params) {

ECRDataFile ecrDataFile = new ECRDataFile();

HttpURLConnection urlConnection = null;
CryptoProvider cryptoProvider = new CryptoProvider();


OutputStream out = null;
try {

JsonObject postData = new JsonObject();

postData.addProperty("id", 123);
postData.addProperty("encryptionKey", 321);

postData.addProperty("data", "Lewis' mom is fat");


URL url = new URL("http://10.0.2.2:44378/api/values");




urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");




out = new BufferedOutputStream(urlConnection.getOutputStream());
Log.d("doInBackground Post", "doInBackground pos2");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
Log.d("doInBackground Post", "doInBackground pos3");
writer.write(postData.toString());
writer.flush();
writer.close();
out.close();
urlConnection.connect();


}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}


return null;
}
  

Комментарии:

1. urlConnection.connect(); Это слишком поздно. Вы уже написали / опубликовали свое сообщение.

2. Вы должны использовать inputstream для чтения сообщения, которое сервер отправляет обратно. И проверьте код результата.

3. Спасибо, но не могли бы вы помочь мне с кодом, пожалуйста?

4. То, что вы хотите, довольно стандартно, и код много раз публиковался в stackoverflow. Так что немного поищите. Кроме того, вы отправляете не только строку, но и текст в формате json, и ваш сервер должен это принять.