HttpURLConnection не работает на Android

У меня проблема и правда не знаю что не так:-/

У меня есть простая функция, вызываемая после нажатия кнопки

public void clickFunc(View view) {

        StringBuilder result = new StringBuilder();
        try {
            URL url = new URL("http://google.com");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.connect();
            int responseCode=conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {

                InputStream in = new BufferedInputStream(conn.getInputStream());
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));

                String line;

                while ((line = reader.readLine()) != null) {

                    result.append(line);
                }
                in.close();
                httpTxt.setText(result.toString());

            }
            else {
                httpTxt.setText("false : "+responseCode);
            }
        }
        catch(Exception e){
            httpTxt.setText("Exception: " + e.getMessage());
        }


    }

Но после клика мой вывод - Exception: null

В манифесте у меня есть <uses-permission android:name="android.permission.INTERNET" />

Этот код, по моему мнению, такой же, как и все коды, упомянутые здесь или в Интернете:-/

httptxt - мой текстовый вид для вывода со страницы

Спасибо

2 ответа

Хорошо, я не знал, что я должен сделать это в фоновом режиме... это работает сейчас, спасибо!

public void clickFunc(View view) {

        new SendPostRequest().execute();
    }
    private class SendPostRequest extends AsyncTask<Void, Void, String> {

    protected String doInBackground (Void... params) {

        StringBuilder result = new StringBuilder();
        HttpURLConnection conn = null;
        BufferedReader reader;

        try {
            URL url = new URL("http://stackru.com"); 

            conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(15000);
            conn.setConnectTimeout(15000);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.connect();
            int responseCode=conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {

                InputStream in = new BufferedInputStream(conn.getInputStream());
                reader = new BufferedReader(new InputStreamReader(in));

                String line;

                while ((line = reader.readLine()) != null) {

                    result.append(line);
                }
                in.close();
                return(result.toString());

            }
            else {
                return("false : "+responseCode);
            }
        }
        catch(Exception e){
            return("Exception: " + e.getMessage());
        }
    }
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            httpTxt.setText(s);
        }

    }

Я не программист Android, так что даже если я не знал этого, извините, ребята:)

О моем приложении, если вам интересно, почему я этого хотел - я читаю штрих-код, захожу в скрипт php, просматриваю базу данных, если есть этот код, и возвращаю true или false

На андроиде много потоков. Когда вы нажимаете http-запрос, это означает, что он будет работать с другим потоком, поэтому, если вы хотите выполнить http-запрос, вы должны поместить его в асинхронный класс, потому что это длинная операция, и, наконец, если Если вы хотите изменить ответ http, вы должны поместить свои изменения в поток пользовательского интерфейса, что означает, что он должен быть ниже Handler или же RunOnUiThread потому что асинхронная задача не может иметь доступ к потоку пользовательского интерфейса напрямую, если вы не хотите использовать Async task и runUiThred, ни один из обработчиков не использует залп, это API Google позволяет

Другие вопросы по тегам