Android 资讯类App项目实战 第二章 retrofit获
前言:
正在做一个资讯类app,打算一边做一边整理,供自己学习与巩固。用到的知识复杂度不高,仅适于新手。经验不多,如果写出来的代码有不好的地方欢迎讨论。
以往的内容
第一章 滑动顶部导航栏
第二章 获取网络数据
本章内容最终效果:
本章内容最终效果知识点:
retrofit,okhttp,SwipeRefreshLayout,mvp模式
学习目标:
1、掌握Retrofit+OkHttp的结合使用。
2、用MVP模式完成代码的书写。
3、SwipeRefreshLayout下拉刷新数据。
通过各种Api获取网络数据时整个项目的基础,Retrofit+Okhttp的结合帮助我们更快完成网络请求的过程。
项目实战:
注意
本章用到的drawable资源、values资源皆存放在百度网盘
(请将values文件夹中的style.xml或color.xml更新一致后再运行,如有后续更新自行修改)
1.1 项目结构
本章内容完整的项目结构:
项目结构
需导入的库:
build.gradle
1.2 Retrofit
本章Retrofit的讨论可参考我的另一篇文章retrofit2+OkHttp3的初尝试
首先写一个Api类,用来存放Url。
public class Api {
public static final String NEWS_HOST = "https://c.m.163.com/";
public static final String HEADLINE_ID = "T1348647909107";
public static final String NBA_ID = "T1348649145984";
public static final String JOKE_ID = "T1350383429665";
}
本章用到的Api为网易新闻api:
http://c.m.163.com/nc/article/headline/T1348647909107/0-20.html
属性类NewsBean用GsonFormat生成就行,在这里就不贴代码了,不懂得如何操作参考使用Gson和GsonFormat解析复杂Json
对了,由于网易新闻返回的数据里不同类型的新闻id会不同,所以使用一个NewsBean会有冲突,我的方法很笨,直接在NewsBean里写三个不同的get、set方法,所以需要大家在GsonFormat生成代码后再修改代码:
NewsBean如果大家有更好的解决办法欢迎来讨论
观察本章用到的Api可以发现,这种Api需要前后拼接,那为什么我上面的Api类没有写END_URL来作为结尾呢?这里就体现了retrofit的强大之处了。
RetrofitService:
RetrofitService我们看到retrofit本身就有url拼接功能,需要改变的参数也可以用{}来达到占位的效果。
接下来是RetrofitHelper:
RetrofitHelper2.1 MVP模式
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
首先是M层
M层有两个接口:
INewsModel
INewsModelIOnLoadListener
IOnLoadListener然后是NewsModel类
2018-05-20_173507.jpgV层有一个接口INewsView,用来规定fragment所有用到的方法
INewsViewP层的任务就是把M层和V层连接起来
首先是P层的接口
然后是NewsPresenter
NewsPresenter
2.2 Fragment显示数据
Fragment的修改主要是FgNewsListFragment有修改
FgNewsListFragment的布局加一个SwipeRefreshLayout,用于下拉刷新。
fg_news_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/srl_news"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_news"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="top"
android:textSize="20sp" />
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
FgNewsListFragment:
FgNewsListFragment记得加上网络权限
<uses-permission android:name="android.permission.INTERNET"/>
最终效果:
最终效果
任务
在FgMovieFragment里将豆瓣电影Api的数据提取并显示电影名称(title)和导演数组信息(directors)
api:https://api.douban.com/v2/movie/in_theaters
效果:
项目源码:https://github.com/Huigesi/IdleReaderDemo
上一章:
第一章 滑动顶部导航栏
下一章:
第三章 滑动顶部导航栏