0

我知道这个问题已经被问过好几次了,但我现在很无助。

我在 localhost 有一个 php 网页,它回显“Hello”。(在本地主机上完美运行)。我有以下代码在我的应用程序中显示从本地主机网页到 TextView 的响应。

tv = (TextView) findViewById(R.id.txtTest);
InputStream is = null;
String result = "";
    String url = "http://10.0.2.2/android/try.php";
    HttpClient httpclient = new DefaultHttpClient();

    try {               
        HttpPost httppost = new HttpPost(url);

        HttpResponse response = httpclient.execute(httppost);

        Log.d("myapp", "response " + response.getEntity());

        HttpEntity entity = response.getEntity();
        is = entity.getContent();
        String st = EntityUtils.toString(response.getEntity());


    } 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, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        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());
    }

    tv.setText(result.toString());

我收到以下错误(LogCat)。

09-24 13:34:42.654: E/log_tag(2032): Error in http connection android.os.NetworkOnMainThreadException
09-24 13:34:42.654: E/log_tag(2032): Error converting result java.lang.NullPointerException

PS我在 Manifest 中添加了 Internet 权限。

4

1 回答 1

3

您应该从不同于主 (UI) 线程的线程执行网络操作(连接等)。这就是你得到的错误android.os.NetworkOnMainThreadException的意思。

您应该查看 ASyncTask 或 Thread 来做到这一点。

也读这篇文章...

用以下代码替换您当前拥有的代码:

    AsyncTask<Void,Void,Void> my_task = new AsyncTask<Void,Void,Void>() {
        @Override
        protected void onPostExecute() {
            TextView  tv = (TextView) findViewById(R.id.txtTest);
            tv.setText(result.toString());
        }

        @Override
        protected Void doInBackground(Void... voids) {
            InputStream is = null;
            String result = "";
            String url = "http://10.0.2.2/android/try.php";
            HttpClient httpclient = new DefaultHttpClient();

            try {
                HttpPost httppost = new HttpPost(url);

                HttpResponse response = httpclient.execute(httppost);

                Log.d("myapp", "response " + response.getEntity());

                HttpEntity entity = response.getEntity();
                is = entity.getContent();
                String st = EntityUtils.toString(response.getEntity());


            } 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, "UTF-8"), 8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                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());
            }
        }
    }.execute();
于 2012-09-24T08:49:24.680 回答