HTTP POST连接出错

时间:2012-01-06 18:52:58

标签: php android json android-emulator http-post

我正在使用一个类来使用HTTP POST&通过php / json从数据库获取数据并将其转换为字符串。

问题是我得到了 LogCat中的"Error in http connection android.os.NetworkOnMainThreadException"。我在模拟器上测试它,我使用正确的端口地址。我知道这是因为端口在应用程序的其他部分工作正常(从Localhost加载HTML)。如果我在桌面浏览器中运行php文件,它运行正常。我也知道在mySQL for 10.0.2.2&中正确设置了权限。用户在php登录文件中设置。

所以我的问题是:有没有人遇到同样的问题,如果有的话,你有没有想出问题是什么或者我应该寻找什么想法?

Thnx的帮助!

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 个答案:

答案 0 :(得分:2)

您可能正在对应用程序的主线程进行网络操作(这是抛出该异常的常见原因)。

你永远不应该这样做。主线程应仅专用于用户交互,并且应将所有网络交互卸载到辅助线程(例如,使用AsyncTask)。

有关详细信息,请阅读: http://developer.android.com/guide/practices/design/responsiveness.html