okhttp获取网络数据之轮播图效果实现
来源:互联网 发布:软件系统设计方案 编辑:程序博客网 时间:2024/06/08 14:47
网上大神写的文章已经很多,我写这个只是想把自己的学习过程记录下来,能看到自己一步步的成长,其实有些东西已经用过了,但很多时候用的是各种封装的,想重新开始了解下,以前用过xutils,volley,到现在用okhttp,发现一入it深似海,需要不断的学习,不然就会跟不上步伐,但是既已选择,就无怨无悔,而且相比于做其他的工作,我还是更喜欢这样状态的自己。
这篇博客写的是okhttp+gson解析的,其中轮播图显示用的是Banner+glide。等后面用到retrofit时便不需要自己解析,也不需要自己去实现子线程到主线程的回调,源码里面已经写好了。
首先在build.gradle中添加依赖,这里的话okio的依赖一定要添加,因为okhttp在io处理时用到了
compile 'com.squareup.okio:okio:1.5.0'compile 'com.youth.banner:banner:1.4.9'compile 'com.github.bumptech.glide:glide:3.7.0'compile 'com.squareup.okhttp:okhttp:2.4.0'
在这里用一个get请求的实例来进行讲解,效果如下图,这是是我自己用工具做的,看得有些晃眼
核心代码:
private void getdata() { //创建okHttpClient对象 OkHttpClient mOkHttpClient = new OkHttpClient(); //创建一个Request final Request request = new Request.Builder().url("https://baiting.longruncloud.com/api/recommendations").build(); //请求加入调度,异步的方式执行请求 mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(final Response response) throws IOException { /** * 这里成功代表的是http返回成功,也就是若返回404、405之类的错误也会回调到这里 * 所以我们需要自己判断服务端返回码,一般返回200是成功处理了请求 */ if (response.code() == 200) { final String res = response.body().string(); RecommendationBean recommendationBean = gson.fromJson(res, RecommendationBean.class); carousels = recommendationBean.getCarousels(); /** * 因为Android 的网络请求必须在非主线程,而视图的更新必须在主线程 * 所以必须有子线程回调主线程这样一个操作,而okhttp没有添加任何关于Android的代码 * 这样可以使得okhttp可以应用于任何地点而单独存在 * 但是在Android中就变成必须要自己去实现子线程到主线程的回调 * 也就是在执行异步请求之后,得到数据时我们又要使用runOnUiThread更新ui(设置界面) */ runOnUiThread(new Runnable() { @Override public void run() { //增强for循环添加图片路径 for (RecommendationBean.CarouselsBean element : carousels) { String image = element.getImage(); images.add(image); } //Banner图片加载,支持手势滑动,支持首尾循环 banner.setImageLoader(new GlideImageLoader()); // 设置图片集合 banner.setImages(images); //banner设置方法全部调用完毕时最后调用 banner.start(); } }); } } }); }注释的已经很详细,相信大家都能看懂,后面三行是加载轮播图的,以前用imageloader的时候还挺麻烦的。其中需要用到的GlideImageLoader类和布局文件我也贴出来:
public class GlideImageLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { /** 图片加载方式由自己选择,我用的是glide */ Glide.with(context).load(path).into(imageView); }}
<com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="wrap_content" />实体类的话大家可以在网页上打开url,然后复制内容用studio自带的gsonformat就可以创建。到此一个完整的网络请求就完成了。
另外附上Post请求代码:
OkHttpClient mOkHttpClient = new OkHttpClient();FormEncodingBuilder builder = new FormEncodingBuilder();builder.add("username", "okhttp");//有几个参数add几个Request request = new Request.Builder() .url("url地址") .post(builder.build()) .build();mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { Log.e("Post---response", response + ""); //与get请求一样,若涉及到回调主线程,都需要通过runOnUiThread或者handler更新ui }});
希望能和各位共同进步~
阅读全文
0 0
- okhttp获取网络数据之轮播图效果实现
- OkHttp获取网络数据
- OkHttp获取网络数据
- MVP+OKHttp获取网络数据
- HttpURLConnection和okHttp两种获取网络数据实现
- Retrofit+okhttp拦截器获取网络数据
- 探探左滑右滑, OKHttp请求网络数据实现
- 网络获取图片数据后 利用viewpager实现弹簧效果
- OKHttp请求网络数据
- OKhttp网络缓存数据
- Okhttp和网络数据
- OkHttp网络数据请求
- okhttp网络请求数据
- OKhttp+Gson实现从网络上获取最新新闻
- RecyclerView和okhttp结合 实现一个网络请求数据
- 网络访问之OkHttp
- RecyclerView实现多种布局与OkHttp结合获取数据
- OKhttp网络获取框架使用
- banner图的第一版
- ChromiumFX js调用C#的方法
- AOP(Aspect Oriented Programming),面向切面编程
- 生理周期
- [PHPCMS V9二次开发]自定义字段模型-文本组
- okhttp获取网络数据之轮播图效果实现
- ibatis配置多个数据源
- information_schema系统表——COLUMN_PRIVILEGES
- HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
- centos7下sheepdog的简单使用
- 构造类的过程中各种代码的访问顺序
- 阿里云 CDN HTTPS 最佳实践——动态密钥套件(三)
- 数据科学与大数据技术(十一周)-课件and课后习题
- Win10 U盘安装教程