0

私は AsynTask を使用してネットからデータを取得し、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

どうすればこれを行うことができますか?

4

3 に答える 3

2

盲目的な推測は次のとおりです。

txtT.setText(result.getCurrentTempC());
txtH.setText(result.getAtmosphereHumidity());

返品int不可string。その場合はint、リソース ID と見なされます。これはうまくいくでしょう:

txtT.setText( "" + result.getCurrentTempC());
txtH.setText( "" + result.getAtmosphereHumidity());
于 2012-12-02T17:36:44.630 に答える
1

乾杯 !、問題は txthum=txtH;にあるはずです。txtH =txthum; である必要があり ます。

于 2012-12-02T18:07:41.727 に答える
0

プライベート クラスに TextView を設定しないでください。2 つの TextView を PatientAssistant クラスのグローバル変数として設定したので、プライベート AsyncClass で直接使用する必要があります。

于 2012-12-02T17:39:17.130 に答える