Http数据未显示在我的TextView[android]上

Http数据未显示在我的TextView[android]上,android,http,textview,Android,Http,Textview,我正在尝试通过HTTP请求从google获取数据: 主要 HTTP clas如下所示: public class HTTP { public String getInternetData() throws Exception{ BufferedReader in = null; String data = null; try{ HttpClient client = new DefaultHttpClient(); URI website

我正在尝试通过HTTP请求从google获取数据:

主要

HTTP clas如下所示:

public class HTTP {

public String getInternetData() throws Exception{
    BufferedReader in = null;
    String data = null;
    try{
        HttpClient client = new DefaultHttpClient();
        URI website = new URI("http://www.google.net");
        HttpGet request = new HttpGet();
        request.setURI(website);
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String nl = System.getProperty("line.separator");
        while((l = in.readLine()) !=null){
            sb.append(l + nl );
        }
        in.close();
        data = sb.toString();
        return data;
    }finally {
        if (in != null){
            try{
                in.close();
                return data;

            }catch (Exception  e){
                e.printStackTrace();
            }
        }
    }
}

}
这是控制台日志:

04-27 19:31:58.063 2167-2191/com.example.briesanji.test D/opengl﹕ 请求渲染脏区域:true 04-27 19:31:58.065 2167-2167/com.example.briesanji.test D/﹕ HostConnection::get()已建立新主机连接0xa687c600,tid 2167 04-27 19:31:58.103 2167-2167/com.example.briesanji.test D/Atlas﹕ 正在验证映射。。。 04-27 19:31:58.196 2167-2191/com.example.briesanji.test D/﹕ 主机连接::get()已建立新主机连接0xa687c7c0,tid 2191 04-27 19:31:58.207 2167-2191/com.example.briesanji.test I/opengl﹕ 已初始化EGL,版本1.4 04-27 19:31:58.283 2167-2191/com.example.briesanji.test D/opengl﹕ 正在启用调试模式0 04-27 19:31:58.334 2167-2191/com.example.briesanji.test W/EGL_仿真﹕ 未实现eglSurfaceAttrib 04-27 19:31:58.334 2167-2191/com.example.briesanji.test W/OpenGLRenderer﹕ 未能在表面0xa6868780上设置EGL_交换_行为,错误=EGL_成功

TextView不显示数据,但保留其默认文本(“加载数据”)
我试图更改
httpStuff.setText(返回)
httpStuff.setText(“hello”)
但没什么,所以我认为这是一个布局问题,然后我拿出了
httpStuff.setText(“hello”)从try方法,它显示Hello。。所以问题当然是try方法,但我不知道我错在哪里

您的代码不起作用,因为尝试在其主线程上执行网络操作。因此,您会收到一个
NetworkOnMainThreadException

解决此问题的最简单解决方案是使用
AsyncTask

public class SampleActivity extends Activity {

    TextView httpStuff;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample);

        httpStuff = (TextView) findViewById(R.id.add_button);
        new DownloadInternetData().execute();
    }

    public class DownloadInternetData extends AsyncTask<Void, Void, String>{

        @Override
        protected String doInBackground(Void... voids) {
            BufferedReader in = null;
            String data = null;
            try {
                HttpClient client = new DefaultHttpClient();
                URI website = new URI("http://www.google.net");
                HttpGet request = new HttpGet();
                request.setURI(website);
                HttpResponse response = client.execute(request);
                in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuffer sb = new StringBuffer("");
                String l = "";
                String nl = System.getProperty("line.separator");
                while ((l = in.readLine()) != null) {
                    sb.append(l + nl);
                }
                in.close();
                data = sb.toString();
                return data;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                        return data;

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

            return "";
        }

        @Override
        protected void onPostExecute(String result) {
            httpStuff.setText(result);
        }
    }
}
public类SampleActivity扩展活动{
TextView-httpStuff;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_示例);
httpStuff=(TextView)findViewById(R.id.add_按钮);
新下载的InternetData().execute();
}
公共类下载InternetData扩展异步任务{
@凌驾
受保护的字符串背景(无效…无效){
BufferedReader in=null;
字符串数据=null;
试一试{
HttpClient=new DefaultHttpClient();
URI网站=新的URI(“http://www.google.net");
HttpGet请求=新建HttpGet();
setURI(网站);
HttpResponse response=client.execute(请求);
in=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuffer sb=新的StringBuffer(“”);
字符串l=“”;
字符串nl=System.getProperty(“line.separator”);
而((l=in.readLine())!=null){
sb.追加(l+nl);
}
in.close();
data=sb.toString();
返回数据;
}捕获(例外e){
e、 printStackTrace();
}最后{
if(in!=null){
试一试{
in.close();
返回数据;
}捕获(例外e){
e、 printStackTrace();
}
}
}
返回“”;
}
@凌驾
受保护的void onPostExecute(字符串结果){
httpStuff.setText(结果);
}
}
}

是否检查了
getInternetData
是否没有引发异常?而不是使用
e.printStackTrace()
您可以记录错误并发布logcat输出吗?如何检查getInternetData没有引发异常?使用debbugger或使用
log.e()
而不是
e.printStackTrace()如果我制造了所有这些问题,很抱歉,但我是这类代码的新手。无论如何,Log.e()不起作用。上面写着“无法解析方法‘e()”,但我在youtube上复制代码的那个家伙没有我的问题,他没有使用AsyncTask,也许他使用的是旧版本的android。蜂巢之后,您无法在其主线程上执行网络操作。你是我的英雄,马蒂亚,你解决了我的问题。(你是意大利人吗???)不客气。我看你是新来的。如果您认为答案解决了问题,请单击绿色复选标记将其标记为“已接受”。(你猜对了,我是意大利人)哦,我的上帝,我也是。。你真的是最好的。有什么方法可以让我把你加为朋友吗?
public class SampleActivity extends Activity {

    TextView httpStuff;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sample);

        httpStuff = (TextView) findViewById(R.id.add_button);
        new DownloadInternetData().execute();
    }

    public class DownloadInternetData extends AsyncTask<Void, Void, String>{

        @Override
        protected String doInBackground(Void... voids) {
            BufferedReader in = null;
            String data = null;
            try {
                HttpClient client = new DefaultHttpClient();
                URI website = new URI("http://www.google.net");
                HttpGet request = new HttpGet();
                request.setURI(website);
                HttpResponse response = client.execute(request);
                in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                StringBuffer sb = new StringBuffer("");
                String l = "";
                String nl = System.getProperty("line.separator");
                while ((l = in.readLine()) != null) {
                    sb.append(l + nl);
                }
                in.close();
                data = sb.toString();
                return data;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                        return data;

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

            return "";
        }

        @Override
        protected void onPostExecute(String result) {
            httpStuff.setText(result);
        }
    }
}