Ошибка с HTTP-соединением POST - PullRequest
0 голосов
/ 06 января 2012

Я использую класс для использования HTTP POST и получения данных из базы данных через php / json и преобразования их в строку.

Проблема в том, что я получаю "Error in http connection android.os.NetworkOnMainThreadException" в LogCat.Я тестирую это на эмуляторе и использую правильный адрес порта.Я знаю это, потому что порт отлично работает в других частях приложения (загрузка HTML из Localhost).Если я запускаю файл php в настольном браузере, он работает нормально.Я также знаю, что в mySQL правильно установлены разрешения для 10.0.2.2 и пользователь задан в файле входа в систему php.

Итак, мой вопрос: кто-нибудь сталкивался с такой же проблемой, и если да, выяснили ли выВыясните, в чем заключалась проблема или какие-либо идеи о том, что еще мне следует искать?

Спасибо за вашу помощь!

public void loadQuery(String p) {

        String qO = getIntent().getStringExtra("QUERY_ORDER");

        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        // http post
        try {
            HttpClient httpclient = new DefaultHttpClient();
            // HttpPost httppost = new HttpPost("http://10.0.2.2/Andaero/php/" +
            // p + qO + ".php");

            //Hard coded the php link to make sure -->

            HttpPost httppost = new HttpPost(
                    "http://10.0.2.2/Andaero/php/regulatory_list_ASC.php");

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection " + e.toString());
        }

        // convert response to string
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");

            String line = "0";
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
        } catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }

        setListAdapter(new QueryAdapter(this, result));
    }

1 Ответ

2 голосов
/ 06 января 2012

Возможно, вы выполняете сетевые операции в главном потоке приложения (это общая причина, по которой выдается это исключение).

Ты никогда не должен этого делать. Основной поток должен быть предназначен только для взаимодействия с пользователем, а все сетевое взаимодействие должно быть выгружено во вторичные потоки (например, используйте AsyncTask).

Для получения дополнительной информации, хорошее чтение: http://developer.android.com/guide/practices/design/responsiveness.html

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