Android回调

在天气APP的MainActivity中需要调用Weather类中的requestWeather(),在网上获得天气数据,并要求requestWeather()在获得完天气数据之后,将天气数据返回给MainActivity(即回调),这样MainActivity就能够在获得天气数据之后更新UI。
首选需要定义一个接口WeatherDataListener

public interface WeatherDataListener {
    /**
     * 天气数据网络加载并且解析完毕
     * @param weatherInfoList
     */
    void onWeatherDataLoaded(List<WeatherInfo> weatherInfoList);
}

在Weather中定义requestWeather()方法

 public void requestWeather(final WeatherDataListener weatherDataListener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL(weatherUrl());//weatherUrl()是天气请求url
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.connect();
                    InputStream in = connection.getInputStream();
                    BufferedReader buffer = new BufferedReader(new InputStreamReader(in));
                    StringBuilder builder = new StringBuilder();
                    String s;
                    if ((s = buffer.readLine()) != null)
                        builder.append(s);
                    parseData(builder.toString());
                    weatherDataListener.onWeatherDataLoaded(weatherInfoList);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

对于MainActivity有两种方式,一种是直接实现接口WeatherDataListener ,另一种是在类中实new接口WeatherDataListener
方法1:

public class MainActivity extends Activity implements WeatherDataListener {
		...
		Weather weather=new Weather();
		weather.requestWeather(this);
		@Override
    public void onWeatherDataLoaded(final List<WeatherInfo> weatherInfoList){
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
                //更新UI
            }
        });
    }
}

方法2:

public class MainActivity extends Activity{
		......
		Weather weather=new Weather();
		weather.requestWeather(weatherDataListener);
		private WeatherDataListener weatherDataListener=new WeatherDataListener() {
        @Override
        public void onWeatherDataLoaded(final List<WeatherInfo> weatherInfoList) {
            runOnUiThread(new Runnable(){
                @Override
                public void run() {
                     //更新UI
                }
            });
        }
    };
}

方法3:

public class MainActivity extends Activity{
		......
		Weather weather=new Weather();
		weather.requestWeather(new WeatherDataListener() {
            @Override
            public void onWeatherDataLoaded(List<WeatherInfo> weatherInfoList) {
                runOnUiThread(new Runnable(){
                    @Override
                    public void run() {
						 //更新UI
                    }
            });
        }});
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值