okhttp框架学习

来源:互联网 发布:淘宝想开情趣用品店 编辑:程序博客网 时间:2024/06/05 02:47

集成和代码:


compile 'com.squareup.okhttp3:okhttp:3.4.1'

//默认是get请求 

public class HttpUtil {    public static void sendOkHttpRequest(String address, okhttp3.Callback callback) {        OkHttpClient client = new OkHttpClient();        Request request = new Request.Builder().url(address).build();        client.newCall(request).enqueue(callback);    }}


    /**     * 根据天气id请求城市天气信息。     */    public void requestWeather(final String weatherId) {        String weatherUrl = "https://api.heweather.com/x3/weather?cityid=" + weatherId + "&key=bc0418b57b2d4918819d3974ac1285d9";        HttpUtil.sendOkHttpRequest(weatherUrl, new Callback() {            @Override            public void onResponse(Call call, Response response) throws IOException {                final String responseText = response.body().string();                final Weather weather = Utility.handleWeatherResponse(responseText);                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        if (weather != null && "ok".equals(weather.status)) {                            SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();                            editor.putString("weather", responseText);                            editor.apply();                            showWeatherInfo(weather);                        } else {                            Toast.makeText(WeatherActivity.this, "获取天气信息失败", Toast.LENGTH_SHORT).show();                        }                        swipeRefresh.setRefreshing(false);                    }                });            }            @Override            public void onFailure(Call call, IOException e) {                e.printStackTrace();                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        Toast.makeText(WeatherActivity.this, "获取天气信息失败", Toast.LENGTH_SHORT).show();                        swipeRefresh.setRefreshing(false);                    }                });            }        });        loadBingPic();    }    /**     * 加载必应每日一图     */    private void loadBingPic() {        String requestBingPic = "http://guolin.tech/api/bing_pic";        HttpUtil.sendOkHttpRequest(requestBingPic, new Callback() {            @Override            public void onResponse(Call call, Response response) throws IOException {                final String bingPic = response.body().string();                SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(WeatherActivity.this).edit();                editor.putString("bing_pic", bingPic);                editor.apply();                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        Glide.with(WeatherActivity.this).load(bingPic).into(bingPicImg);                    }                });            }            @Override            public void onFailure(Call call, IOException e) {                e.printStackTrace();            }        });    }


runOnUiThread(即保证在ui线程中更新数据):
把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给runOnUiThread(Runnable)。 这样Runnable对像就能在ui线程中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程。



参考文章

http://blog.csdn.net/itachi85/article/details/51190687

http://blog.csdn.net/jdfkldjlkjdl/article/details/73824677

http://blog.csdn.net/donkor_/article/details/53589316

原创粉丝点击