Отправка POST запроса на реальном устройстве.

Ответить
NapalmRain
Сообщения: 34
Зарегистрирован: 04 июн 2014, 10:21

Отправка POST запроса на реальном устройстве.

Сообщение NapalmRain » 29 мар 2016, 14:42

Доброго всем времени суток!

Есть у меня в приложении отправка пост запроса и получение от сервера ответа.
Запрос наиприметивнейший, просто послать данные на сервер и получить результат, на стороне сервера php скрипт, который всё это дело обрабатывает.
Проблема состоит в том, что при проверке на виртуальном устройстве из Андроид Студии всё работает как по маслу, а при установке приложения на реальный смартфон всегда получаю пустой результат.
Вот код, который я использую:

Код: Выделить всё

public void sendResult(String resp) {
        Toast.makeText(getActivity(), resp, Toast.LENGTH_LONG).show();
    }

    @Override
    public void onClick(View v) {
        parameters = "email="+email.getText()+"&text="+text.getText();
        Toast.makeText(getActivity(), "Отправляем ", Toast.LENGTH_LONG).show();
        new sendSupportMess().execute();
    }

    public interface OnFragmentInteractionListener {
        public void onFragmentInteraction(Uri uri);
    }

    public class sendSupportMess extends AsyncTask<String, Void, String> {
        public sendSupportMess() {
            super();
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {
            URL url;
            HttpURLConnection connection = null;
            String urlParameters = "methodname=sendSupportMessage&"+parameters;
            try {
                url = new URL("http://fortest.rain-studio.com/api/method.php");
                connection = (HttpURLConnection)url.openConnection();
                connection.setRequestMethod("POST");
                connection.setRequestProperty("Content-Type",
                        "application/x-www-form-urlencoded");
                connection.setRequestProperty("Content-Length", "" +
                        Integer.toString(urlParameters.getBytes().length));
                connection.setRequestProperty("Content-Language", "en-US");
                connection.setUseCaches (false);
                connection.setDoInput(true);
                connection.setDoOutput(true);

                DataOutputStream wr = new DataOutputStream (connection.getOutputStream ());

                wr.writeBytes(urlParameters);
                wr.flush();
                wr.close();
                //Получаем ответ от сервера
                InputStream is = connection.getInputStream();
                BufferedReader rd = new BufferedReader(new InputStreamReader(is));
                String line;
                StringBuffer response = new StringBuffer();
                while((line = rd.readLine()) != null) {
                    response.append(line);
                    response.append('\r');
                }
                rd.close();
                return response.toString();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            } finally {
                if(connection != null) {
                    connection.disconnect();
                }
            }
        }

        @Override
        protected void onPostExecute(String respString) {
            if (respString != null) {
                super.onPostExecute(respString);
                sendResult(respString);
            } else {
                Toast.makeText(getActivity(), "Служба поддержки вернула пустой результат!", Toast.LENGTH_SHORT).show();
            }
        }

    }
Проверял на двух смартфонах, на обоих получал сообщение Служба поддержки вернула пустой результат!
На виртуальном устройстве нормальный ответ от сервера...

Буду чрезвычайно признателен, если подскажете, где я смотрю не в ту сторону.

Заранее благодарю!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Отправка POST запроса на реальном устройстве.

Сообщение Foenix » 29 мар 2016, 15:17

в чем дело не знаю, к сожалению, просто совет - используй Retrofit для таких целей.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

NapalmRain
Сообщения: 34
Зарегистрирован: 04 июн 2014, 10:21

Re: Отправка POST запроса на реальном устройстве.

Сообщение NapalmRain » 29 мар 2016, 16:19

Foenix писал(а):используй Retrofit
Благодарю за совет! Обязательно посмотрю в эту сторону.

Не знаю, в чём была проблема, но после публикации приложения в гугл плей и установки оттуда того же АПКшника, функция отрабатывает вполне корректно, код не редактировался...

Магия да и только. Посмотрю ещё как она себя будет вести дальше, но конечно, если Retrofit упрощает задачу, то, пожалуй, перепишу это добро под него.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Отправка POST запроса на реальном устройстве.

Сообщение Foenix » 29 мар 2016, 18:01

это почти стандарт, одна из самых необходимых библиотек.
для распарсивания она работает в тандеме с GSON по-моему. Там вообще все очень очень коротко выходит.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить