前言
为什么使用okhttp3就不说了,网上有很多资料。也看到过很多关于OkHttp3资料博客等等,有很多内容确实很不错。但有时候就想实现一些小功能,代码却设计得挺复杂的。所以我这里尽量使用最简单的方法实现我们的mvp使用okHttp3。
概述要实现的功能
- 通过调用果壳的API,将传送过来的json数据通过GSON获取实例,所以要添加依赖1compile 'com.google.code.gson:gson:2.8.1'
还要有访问网络权限
然后将获得的实例集合中拿出title,并将它显示到自定义RecyclerView的标题,其中RecyclerView可以参考 这里
果壳API返回的JSON数据实例如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748/***{"now": "2017-04-05T20:45:50.433517+08:00","ok": true,"result": [{"link_v2_sync_img": "http://jingxuan.guokr.com/pick/v2/81717/sync/","source_name": "天了噜!","video_url": "","current_user_has_collected": false,"likings_count": 5,"images": ["http://1.im.guokr.com/12kEBJJ68jxKvIS7tH0w-5aOVdbWe5cr-g915ctFd12AAgAAtQEAAEpQ.jpg?imageView2/1/w/480/h/327","http://2.im.guokr.com/5UfOz7iKuTCf6CywMRri0dz9z-ZBHB5CfqDr4ISt0dKUAgAADwEAAEpQ.jpg?imageView2/1/w/480/h/197","http://2.im.guokr.com/Cp-1LlznSmBkA1zcQcbuUiBcoB8UV6H9HrIA6T4_5l6AAgAA-gEAAEpQ.jpg?imageView2/1/w/480/h/379"],"video_duration": null,"id": 81717,"category": "humanities","style": "article","title": "如果人类灭绝了,该不该被复活?","source_data": {"image": "http://2.im.guokr.com/r8PINb_RG_niPP_rsxxvHLK7HmQE9i1NZD6pWV_0VDKgAAAAoAAAAFBO.png?imageView2/1/w/160/h/160","summary": "吸走你的无聊时间!","id": 52,"key": "天了噜!","title": "天了噜!"},"headline_img_tb": "http://1.im.guokr.com/12kEBJJ68jxKvIS7tH0w-5aOVdbWe5cr-g915ctFd12AAgAAtQEAAEpQ.jpg?imageView2/1/w/288/h/196","link_v2": "http://jingxuan.guokr.com/pick/v2/81717/","date_picked": 1491386460,"is_top": false,"link": "http://jingxuan.guokr.com/pick/81717/","headline_img": "http://1.im.guokr.com/12kEBJJ68jxKvIS7tH0w-5aOVdbWe5cr-g915ctFd12AAgAAtQEAAEpQ.jpg","replies_count": 2,"current_user_has_liked": false,"page_source": "http://jingxuan.guokr.com/pick/81717/?ad=1","author": "春天来了啊","summary": "如果人类灭绝了,该不该被复活?对这个问题,每个人应该都有自己的想法。 3月29日,纽约,美国自然史博物馆(AMNH)举行了艾萨克·","source": "group","reply_root_id": 779351,"date_created": 1491201409},]}*/
实现步骤
首先看一下需要建的类
第一步
根据API返回的数据写出News的实例
API
|
|
News:要写的很多,看懂直接copy就好
|
|
第二步
获得OkHttpClient单例,网络请求方面一般要求单例,关于单例,可以看这里
OkHttp3
|
|
然后在Model里面实现get请求和post请求,但这里只用到get请求,还有就是okHttp3自带的Callback非常方便,无须自己定义回调接口,直接在调用的时候就可以收到返回数据
Model
|
|
第三步
这一步实现在Presenter中所需的动作,即调用Model中的get方法
使用了GSON和okhttp3.Callback()就是变得这么精简,这也是我一直推崇的东西
第四步
这一步要在UI界面上操作,之前忽略了在子线程中不能直接操作UI界面被坑了很长时间,为什么网络请求不属于主线程呢?大概因为网络请求容易导致阻塞,所以是子线程的一种。因此,我们在 view.showResult(list)即更新界面时应加入 runOnUiThread,所以MainAcitvity中showResult中应该这样写
关于Adapter里面的addData怎么就不说了,RecyclerView怎么使用上面也给了链接。
最后
MVP模式还是比较常用的一种模式,这篇文章也是基于这种模式上实现的,想要了解MVP的推荐看这里
本文所用的Demo:https://github.com/Dream97/RecyclerViewTest.git