求助,为什么同样代码,位置不一样效果不一样?

时间:2023-01-19 19:29:07
  刚学android 一个关于TextView的知识。代码如下:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try
{
StringBuffer sb = new StringBuffer();
String url = "http://10.0.2.2:8080/JSON_server/JSONDemoServlet";
String body = getContent(url);
JSONArray array = new JSONArray(body);
for (int i = 0; i < array.length(); i++)
{
JSONObject obj = array.getJSONObject(i);
sb.append("id:").append(obj.getInt("id")).append("\t");
sb.append("name:").append(obj.getString("name")).append("\r\n");
sb.append("gender:").append(obj.getString("gender")).append("\t");
sb.append("email:").append(obj.getString("email")).append("\r\n");
sb.append("----------------------\r\n");
}
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("Hello");
} catch (Exception e){}


为什么textView.setText放这里,就无法设置textView的内容。运行效果如下图
求助,为什么同样代码,位置不一样效果不一样?
textView的text内容并没改变。如果把TextView textView = (TextView) findViewById(R.id.textView);textView.setText("Hello");这两行代码放到setContentView(R.layout.main);后面就可以改变text的内容。这是为什么?

8 个解决方案

#1


一般不应该在oncreate 之类的函数中做耗时太长的操作的。
估计是时间太长,系统让计算停止了。
放到线程中做网络和解析操作吧。

#2


setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

#3


引用 2 楼  的回复:
setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

findViewById(R.id.textView);textView.setText("Hello");
必须放在setContentView(R.layout.main)后面

#4


引用 3 楼  的回复:
引用 2 楼  的回复:

setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

findViewById(R.id.textView);textView.setText("Hello");
必须放在setContentView(R.layout.main)后面


正解啊

#5


引用 3 楼  的回复:
引用 2 楼  的回复:

setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

findViewById(R.id.textView);textView.setText("Hello");
必须放在setContentView(R.layout.main)后面

我把findViewById(R.id.textView);放到setContentView(R.layout.main)后面,然后把textView.setText("Hello");放到catch (Exception e){}后面后可以了,不过,我现在要把JSON解析出来的内容显示到textView中,于是在for那个循环语句后用textView.setText(sb.toString())为什么不起作用?就算随意显示一个字符都不行。这是什么原因?

#6


您没有从网络取到数据,程序卡死,后面的不执行
建议使用1楼的方法
引用 1 楼  的回复:
一般不应该在oncreate 之类的函数中做耗时太长的操作的。
估计是时间太长,系统让计算停止了。
放到线程中做网络和解析操作吧。

#8


引用 5 楼  的回复:
引用 3 楼  的回复:

引用 2 楼  的回复:

setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

findViewById(R.id.textView);textView.setText("Hello");
必须放在setContentView(R.layout.main)后面

我把findViewBy……

呵呵,问题已经解决了,我已经明白原理了,谢谢指点。谢谢各位热心人士帮忙

#1


一般不应该在oncreate 之类的函数中做耗时太长的操作的。
估计是时间太长,系统让计算停止了。
放到线程中做网络和解析操作吧。

#2


setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

#3


引用 2 楼  的回复:
setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

findViewById(R.id.textView);textView.setText("Hello");
必须放在setContentView(R.layout.main)后面

#4


引用 3 楼  的回复:
引用 2 楼  的回复:

setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

findViewById(R.id.textView);textView.setText("Hello");
必须放在setContentView(R.layout.main)后面


正解啊

#5


引用 3 楼  的回复:
引用 2 楼  的回复:

setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

findViewById(R.id.textView);textView.setText("Hello");
必须放在setContentView(R.layout.main)后面

我把findViewById(R.id.textView);放到setContentView(R.layout.main)后面,然后把textView.setText("Hello");放到catch (Exception e){}后面后可以了,不过,我现在要把JSON解析出来的内容显示到textView中,于是在for那个循环语句后用textView.setText(sb.toString())为什么不起作用?就算随意显示一个字符都不行。这是什么原因?

#6


您没有从网络取到数据,程序卡死,后面的不执行
建议使用1楼的方法
引用 1 楼  的回复:
一般不应该在oncreate 之类的函数中做耗时太长的操作的。
估计是时间太长,系统让计算停止了。
放到线程中做网络和解析操作吧。

#7


#8


引用 5 楼  的回复:
引用 3 楼  的回复:

引用 2 楼  的回复:

setContentView(R.layout.main)未设之前,根本就不知道R.id.textView为何物

findViewById(R.id.textView);textView.setText("Hello");
必须放在setContentView(R.layout.main)后面

我把findViewBy……

呵呵,问题已经解决了,我已经明白原理了,谢谢指点。谢谢各位热心人士帮忙