美文网首页Android开发之路Android开发经验谈Android开发
Android 资讯类App项目实战 第二章 retrofit获

Android 资讯类App项目实战 第二章 retrofit获

作者: Huigesi | 来源:发表于2018-05-20 15:31 被阅读877次

    前言:

    正在做一个资讯类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。

    Api.java
    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:

    RetrofitHelper

    2.1 MVP模式

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

    首先是M层
    M层有两个接口:

    INewsModel
    INewsModel
    IOnLoadListener
    IOnLoadListener

    然后是NewsModel类

    2018-05-20_173507.jpg

    V层有一个接口INewsView,用来规定fragment所有用到的方法

    INewsView

    P层的任务就是把M层和V层连接起来
    首先是P层的接口

    INewsPresenter

    然后是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
    效果:

    任务效果.gif

    项目源码:https://github.com/Huigesi/IdleReaderDemo

    上一章:
    第一章 滑动顶部导航栏

    下一章:
    第三章 滑动顶部导航栏

    相关文章

      网友评论

        本文标题:Android 资讯类App项目实战 第二章 retrofit获

        本文链接:https://www.haomeiwen.com/subject/ippzdftx.html