Почему эмулятор Android Studio не выполняет часть моего запроса POST (Java) - PullRequest
0 голосов
/ 29 сентября 2018

Привет пользователям stackoverflow,

Я пытаюсь написать почтовый запрос (отправляет SMS), который вызывается нажатием кнопки.Запрос на публикацию имеет:

Один параметр URL: api_key

Один заголовок: "Content-Type" = "application / x-www-form-urlencoded"

Три JSONпары: ("from", "insert # here"), ("to", "insert # here") и ("body", "Hello, World")

Отправив мой запрос POST по адресуURL конечной точки REST API, я хочу, чтобы SMS отправлялось, когда пользователь нажимает кнопку.Вот что у меня есть:

public class PostSMS extends AsyncTask<Void, String, String>
{
@Override
protected String doInBackground(Void... params) {
    try {
        MainActivity.text.setText("enteredTry");


        URL url = new URL("https://api.apidaze.io/apikey/sms/send?api_secret=apisecret");
        HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();

        MainActivity.text.setText("connectionBuilt");


        urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

        urlConnection.setRequestMethod("POST");
        MainActivity.text.setText("connectionEstablished1");
        urlConnection.connect();

        MainActivity.text.setText("connectionEstablished23");

        // Create JSONObject Request
        JSONObject jsonRequest = new JSONObject();
        jsonRequest.put("from", "1111111111");
        jsonRequest.put("to", "1111111112");
        jsonRequest.put("body", "Hello, World");

        MainActivity.text.setText("jsonArrayConstructed");

        // Write Request to output stream to server
        OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
        out.write(jsonRequest.toString());
        out.close();

        MainActivity.text.setText("OutputStream written");

        int statusCode = urlConnection.getResponseCode();
        String statusMsg = urlConnection.getResponseMessage();

        // Connection success. Proceed to fetch the response.
        if (statusCode == 200)
        {
            InputStream it = new BufferedInputStream(urlConnection.getInputStream());
            InputStreamReader read = new InputStreamReader(it);
            BufferedReader buff = new BufferedReader(read);
            StringBuilder dta = new StringBuilder();
            String chunks;
            while ((chunks = buff.readLine()) != null)
            {
                dta.append(chunks);
            }
            String returndata = dta.toString();
            return returndata;
        }
    catch (ProtocolException e)
    {
        e.printStackTrace();
    } catch (MalformedURLException e)
    {
        e.printStackTrace();
    } catch (IOException e)
    {
        e.printStackTrace();
    } catch (Exception e)
    {
        e.printStackTrace();
    }

    return null;
}

}

При запуске этого кода в OnClickListener мой объект TextView ( текст в коде) показывает только «connectionEstablished1»в эмуляторе, поэтому он не запускает остальную часть программы.

После запуска

urlConnection.setRequestMethod("POST");
MainActivity.text.setText("connectionEstablished1");

,

программа больше не запускается.Нет ошибок во время компиляции.

У меня также есть разрешение

<uses-permission android:name="android.permission.INTERNET" />

.

Спасибо!

1 Ответ

0 голосов
/ 29 сентября 2018

Я проверил ваш код, он работает, если вы удалите MainActivity.text.setText ().

Как отметил Майк М., вы не должны использовать MainActivity.text.setText () для отслеживания прогресса, вам следует использовать Logging для этого.Если вы хотите отобразить прогресс для пользователя, вы должны использовать onProgressUpdate (String ... values) и onPostExecute (String s), которые могут быть переопределены в AsyncTask.

Также вы можете попробовать отладить ваше приложение , как только вы познакомитесь с интерфейсом Android-студии, это проще, чем проверка журналов и StackTraces из блоков catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...