我使用AsyncTask从net获取数据并在Textview中显示,这是我的代码
public class PatientAssistant extends Activity {
private TextView txtTemp,txtHuminity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.patient_assistant);
AppPreferences pref=new AppPreferences(this);
TextView textCity=(TextView)findViewById(R.id.txtCity);
txtTemp=(TextView)findViewById(R.id.txtTemp);
txtHuminity=(TextView)findViewById(R.id.txtHumidity);
textCity.setText(pref.getCity());
String city=(String) textCity.getText();
CallWeatherAsync cwa=new CallWeatherAsync(this,txtTemp,txtHuminity);
cwa.execute(city);
Button btnSend=(Button)findViewById(R.id.btnSend);
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//TODO send report
}
});
}
private class CallWeatherAsync extends AsyncTask<String, Void, WeatherInfo> {
private PatientAssistant _activity;
private TextView txtT,txtH;
public CallWeatherAsync(PatientAssistant activity,TextView txtTmp,TextView txthum)
{
_activity=activity;
txtT=txtTmp;
txthum=txtH;
}
@Override
protected WeatherInfo doInBackground(String... params) {
YahooWeatherUtils yahooWeatherUtils = YahooWeatherUtils.getInstance();
WeatherInfo weatherInfo = yahooWeatherUtils.queryYahooWeather(_activity.getApplicationContext(), params[0]);
return weatherInfo;
}
@Override
protected void onPostExecute(WeatherInfo result) {
txtT.setText(result.getCurrentTempC());
txtH.setText(result.getAtmosphereHumidity());
}
}
}
但这会抛出 Resources $ NotFoundException !!!
12-02 00:39:06.383: E/AndroidRuntime(4035): android.content.res.Resources$NotFoundException: String resource ID #0xc
12-02 00:39:06.383: E/AndroidRuntime(4035): at android.content.res.Resources.getText(Resources.java:247)
12-02 00:39:06.383: E/AndroidRuntime(4035): at android.widget.TextView.setText(TextView.java:3473)
12-02 00:39:06.383: E/AndroidRuntime(4035): at com.assitant.patient.PatientAssistant$CallWeatherAsync.onPostExecute(PatientAssistant.java:116)
12-02 00:39:06.383: E/AndroidRuntime(4035): at com.assitant.patient.PatientAssistant$CallWeatherAsync.onPostExecute
我怎么能这样做?
答案 0 :(得分:2)
盲目的猜测是:
txtT.setText(result.getCurrentTempC());
txtH.setText(result.getAtmosphereHumidity());
返回int
而不是string
。如果是int
则将其视为资源ID。这应该有效:
txtT.setText( "" + result.getCurrentTempC());
txtH.setText( "" + result.getAtmosphereHumidity());
答案 1 :(得分:1)
干杯! ,你的问题应该是 的 txthum = txtH; 强> 它应该是 txtH = txthum;
答案 2 :(得分:0)
您不要在私有类中设置TextView。由于您将2个TextView设置为PatientAssistant类的全局变量,因此您应该直接在私有AsyncClass中使用它们。