Http数据未显示在我的TextView[android]上
我正在尝试通过HTTP请求从google获取数据: 主要 HTTP clas如下所示: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
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);
}
}
}