我有问题。为什么setText方法中的数据设置不正确?
MainActivity类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewCity = (TextView) findViewById(R.id.text_view_city_name);
textViewTemperature = (TextView) findViewById(R.id.text_view_current_temperature);
new Thread(new WeatherYahoo()).start();
Weather weather = new Weather();
textViewCity.setText(weather.getCity());
textViewTemperature.setText(String.valueOf(weather.getTemperature()));
}
在Weather类中下载并正确设置数据(我使用JSON),但在屏幕上显示textViewCity为空字符串,textViewTemperature为0。
答案 0 :(得分:3)
您的活动中的所有内容都在UI线程上执行。所以这种情况正在发生,因为您在使用Thread
开始新的WeatherYahoo
后尝试设置文本,因此您不会等待结果,而只是输出空值。我建议您使用AsyncTask进行此类调用并在UI线程上检索结果。因此,您可以使用WeatherYahoo
方法在doInBackground()
类中完成所有工作,并以onPostExecute()
方法输出结果。举个例子:
private class WeatherYahooTask extends AsyncTask<Void, Void, Weather> {
protected Weather doInBackground(Void... params) {
// do any kind of work you need (but NOT on the UI thread)
// ...
return weather;
}
protected void onPostExecute(Weather weather) {
// do any kind of work you need to do on UI thread
textViewCity.setText(weather.getCity());
textViewTemperature.setText(String.valueOf(weather.getTemperature()));
}
}
答案 1 :(得分:0)
您有两个选择:
等待线程使用以下命令完成json的下载:
{{1}}