pulltorefresh_demo2

MainActivity 
package news1510a.bawei.com.a16_pulltorefresh_demo;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import java.util.ArrayList;import java.util.List;import news1510a.bawei.com.a16_pulltorefresh_demo.fragment.FragmentGridView;import news1510a.bawei.com.a16_pulltorefresh_demo.fragment.FragmentListView;import news1510a.bawei.com.a16_pulltorefresh_demo.fragment.FragmentScrollView;/** * 使用pullToRefresh进行下拉刷新和上拉加载 * 1.去github上下载压缩包,解压出来,把library复制出来改名,路径最好不要有中文 * 2.使用import moundle导进这个库文件,添加库文件的依赖 * 3.此时左下角可能会报错,只需要点击install...去下载16版本的sdk,还需要下载19版本的buildTools * * 查看代码可以看到 * PullToRefreshListView可以刷新的listView控件....间接继承了LinearLayout,是一个自定义的listView * PullToRefreshGridView可以刷新的GridView控件 * PullToRefreshExpandableListView可以刷新的二级列表控件 * PullToRefreshScrollView可以刷新的ScrollView控件 * PullToRefreshWebView可以刷新的WebView控件 */public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; private List<String> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabLayout = (TabLayout) findViewById(R.id.tl_tab); viewPager = (ViewPager) findViewById(R.id.view_pager); list = new ArrayList<>(); list.add("ListView"); list.add("GridView"); list.add("ScrollView"); viewPager.setOffscreenPageLimit(list.size()); //1.设置适配器...fragmnePagerAdapter....getChildFragmentManager...getFragmentManager viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { //2.重写方法...返回的是viewPager当前页的标题 @Override public CharSequence getPageTitle(int position) { return list.get(position); } @Override public Fragment getItem(int position) {//0...listView,1...gridView,2..scrollView Fragment fragment = null; switch (position){ case 0: fragment = new FragmentListView(); break; case 1: fragment = new FragmentGridView(); break; case 2: fragment = new FragmentScrollView(); break; default: break; } return fragment; } @Override public int getCount() { return list.size(); } }); //3.tablayout与viewPager关联使用 tabLayout.setupWithViewPager(viewPager); }}
————————————————————————————————————————————————————
activity_main.xml
————————————————————————————————————————————————————
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <android.support.design.widget.TabLayout
        android:id="@+id/tl_tab"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        app:tabGravity="center"
        app:tabIndicatorColor="@color/colorAccent"
        app:tabMode="scrollable"
        app:tabSelectedTextColor="@color/colorPrimaryDark"
        app:tabTextColor="@color/colorPrimary" />

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>



</LinearLayout>
——————————————————————————————————————————
FragmentListView
——————————————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import news1510a.bawei.com.a16_pulltorefresh_demo.R;
import news1510a.bawei.com.a16_pulltorefresh_demo.adapter.ListViewAdapter;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.DataDataBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.dao.JsonDao;
import news1510a.bawei.com.a16_pulltorefresh_demo.inter.JsonCallBack;
import news1510a.bawei.com.a16_pulltorefresh_demo.util.NetDataUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public class FragmentListView extends Fragment {

    private PullToRefreshListView refreshListView;
    private List<DataDataBean.ResultsBean> list = new ArrayList<>();//记录当前展示的所有数据
    private ListViewAdapter listViewAdapter;
    private int page_num = 1;
    private ILoadingLayout startLabels;
    private JsonDao jsonDao;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_listview_layout,container,false);


        refreshListView = view.findViewById(R.id.refresh_list_view);

        return view;
    }

    /**
     * 使用数据库做一个数据的缓存
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        jsonDao = new JsonDao(getContext());
        //1.先读取数据库中存的数据....有数据,解析展示....无数据,网络获取数据
        String json = jsonDao.getJson("http://gank.io/api/data/Android/10/" + page_num);
        if (json != null){
            //解析 显示

            Gson gson = new Gson();

            DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);

            //往后面添加...
            list.addAll(dataDataBean.getResults());

            //设置适配器
            setAdapter();

        }else {
            //1.设置listView的适配器
            getDataFromNet();
        }




        //2.设置刷新模式
        /*设置pullToRefreshListView的刷新模式,BOTH代表支持上拉和下拉,PULL_FROM_END代表上拉,PULL_FROM_START代表下拉 */
        refreshListView.setMode(PullToRefreshBase.Mode.BOTH);

        //3.通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别(也就是设置向下拉的时候头部里面显示的文字)
        //此时这里设置的是下拉刷新的时候显示的文字,所以第一个设置true表示现在是刷新,第二个设置为false
        startLabels = refreshListView.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("下拉刷新");
        startLabels.setRefreshingLabel("正在刷新...");
        startLabels.setReleaseLabel("放开刷新");

        ILoadingLayout endLabels = refreshListView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("上拉刷新");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");


        //4.设置监听事件
        /**
         * 如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、
         * onPullUpToRefresh()两个方法。
         如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,
         同时实现onRefresh()方法。
         当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,
         Mode.PULL_FROM_END的时候只调用onPullUpToRefresh()方法
         */
        refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            //下拉刷新的时候调用的方法....请求第一页的数据,清空之前的数据,然后再添加设置适配器
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                //下拉刷新....请求第一页的数据,清空之前的数据,然后再添加设置适配器
                getRefreshData();


            }

            //上拉刷新的时候调用的方法..page++,然后在请求数据
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

                //上拉刷新/加载...加载的时候页数++
                page_num++;
                getDataFromNet();


            }
        });

    }

    /**
     * 下拉刷新获取数据
     */
    private void getRefreshData() {
        NetDataUtil.getData("http://gank.io/api/data/Android/10/1", getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {
                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);
                //先清空一下数据
                list.clear();

                //添加到集合的最前边,,,,(0,,,,)
                list.addAll(0,dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //设置适配器之后停止刷新的操作
                refreshListView.onRefreshComplete();

                //可以设置刷新的时间....
                startLabels.setLastUpdatedLabel("上次更新时间:"+new SimpleDateFormat("HH:mm").format(new Date(System.currentTimeMillis())));//last最近的,最后一次update修改/更新
            }
        });

    }


    /**
     * 刚开始进入页面获取网络数据....还可以作为上拉加载获取数据的操作
     *
     *
     */
    private void getDataFromNet() {
        //第一个参数是接口,第二个上下文,第三个回调json数据
        NetDataUtil.getData("http://gank.io/api/data/Android/10/"+page_num, getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {

                //先存入数据库
                jsonDao.insertJson(json,"http://gank.io/api/data/Android/10/"+page_num);

                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);

                //往后面添加...
                list.addAll(dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //停止刷新
                refreshListView.onRefreshComplete();
            }
        });

    }

    private void setAdapter() {
        if (listViewAdapter == null){
            listViewAdapter = new ListViewAdapter(getActivity(),list);
            refreshListView.setAdapter(listViewAdapter);
        }else {
            listViewAdapter.notifyDataSetChanged();
        }

    }
}
————————————————————————————————————————————————
FragmentGridView
————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshGridView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import news1510a.bawei.com.a16_pulltorefresh_demo.R;
import news1510a.bawei.com.a16_pulltorefresh_demo.adapter.GridViewAdapter;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.DataDataBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.inter.JsonCallBack;
import news1510a.bawei.com.a16_pulltorefresh_demo.util.NetDataUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public class FragmentGridView extends Fragment {

    private PullToRefreshGridView refreshGridView;
    private int page_num = 1;
    private List<DataDataBean.ResultsBean> list = new ArrayList<>();//记录当前展示的所有数据
    private ILoadingLayout startLabels;
    private GridViewAdapter gridViewAdapter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_gridview_layout,container,false);

        refreshGridView = view.findViewById(R.id.refresh_grid_view);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        //1.默认的获取第一页的数据,然后设置适配器
        getDataFromNet();

        //2.设置可以刷新的模式
        refreshGridView.setMode(PullToRefreshBase.Mode.BOTH);

        //3.设置刷新的时候展示的文字(状态)
        startLabels = refreshGridView.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("下拉刷新");
        startLabels.setRefreshingLabel("正在刷新...");
        startLabels.setReleaseLabel("放开刷新");
        ILoadingLayout endLabels = refreshGridView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("上拉刷新");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");

        //4.设置下拉和上拉刷新的监听事件
        refreshGridView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) {
                //下拉刷新....请求第一页的数据,清空之前的数据,然后再添加设置适配器
                getRefreshData();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {
                //上拉刷新/加载...加载的时候页数++
                page_num++;
                getDataFromNet();
            }
        });

    }

    /**
     * 下拉刷新获取数据
     */
    private void getRefreshData() {
        NetDataUtil.getData("http://gank.io/api/data/Android/10/1", getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {
                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);
                //先清空一下数据
                list.clear();

                //添加到集合的最前边,,,,(0,,,,)
                list.addAll(0,dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //设置适配器之后停止刷新的操作
                refreshGridView.onRefreshComplete();

                //可以设置刷新的时间....
                startLabels.setLastUpdatedLabel("上次更新时间:"+new SimpleDateFormat("HH:mm").format(new Date(System.currentTimeMillis())));//last最近的,最后一次update修改/更新
            }
        });

    }

    /**
     * 刚开始进入页面获取网络数据....还可以作为上拉加载获取数据的操作
     *
     *
     */
    private void getDataFromNet() {
        //第一个参数是接口,第二个上下文,第三个回调json数据
        NetDataUtil.getData("http://gank.io/api/data/Android/10/"+page_num, getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {

                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);

                //往后面添加...
                list.addAll(dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //停止刷新
                refreshGridView.onRefreshComplete();
            }
        });

    }

    /**
     * 设置适配器的方法
     */
    private void setAdapter() {
        if (gridViewAdapter == null){

            gridViewAdapter = new GridViewAdapter(getActivity(),list);
            refreshGridView.setAdapter(gridViewAdapter);

        }else {
            gridViewAdapter.notifyDataSetChanged();
        }
    }
}
————————————————————————————————————————————
FragmentScrollView
——————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.fragment;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.ScrollView;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import news1510a.bawei.com.a16_pulltorefresh_demo.R;
import news1510a.bawei.com.a16_pulltorefresh_demo.adapter.ListViewAdapter;
import news1510a.bawei.com.a16_pulltorefresh_demo.adapter.ViewPagerAdapter;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.DataDataBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.LunBoBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.inter.JsonCallBack;
import news1510a.bawei.com.a16_pulltorefresh_demo.util.NetDataUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 *
 * 使用可以刷新的ScrollView
 *
 * 1.scrollView里面嵌套listView的时候出现了一种现象,,,只展示一个条目,改变高度的时候可以展示出来其他的,但是还不全
 * 2.自定义一个listView,主要是重写onMeasure方法,,,,重新测量高度
 * 3.ListView自动抢夺焦点,,,需要使用代码把焦点取消
 *
 */
public class FragmentScrollView extends Fragment {

    private PullToRefreshScrollView refreshScrollView;
    private ViewPager viewPager;
    private ListView listView;
    private List<DataDataBean.ResultsBean> list = new ArrayList<>();//记录当前展示的所有数据
    private int page_num = 1;
    private ListViewAdapter listViewAdapter;
    private ILoadingLayout startLabels;
    private List<String> imageUrlList;

    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0){
                //显示下一页....拿到当前页+1
                viewPager.setCurrentItem(viewPager.getCurrentItem() +1);

                //再次发送消息
                handler.sendEmptyMessageDelayed(0,2000);
            }
        }
    };

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_scroll_layout, container, false);

        refreshScrollView = view.findViewById(R.id.refresh_scroll_view);
        viewPager = view.findViewById(R.id.image_view_pager);
        listView = view.findViewById(R.id.scroll_list_view);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        //失去焦点
        listView.setFocusable(false);


        //轮播图
        lunBoTu();

        //listView展示数据
        //1.获取网络数据,,,展示在listView上
        getDataFromNet();

        //2.设置刷新模式
        /*设置pullToRefreshListView的刷新模式,BOTH代表支持上拉和下拉,PULL_FROM_END代表上拉,PULL_FROM_START代表下拉 */
        refreshScrollView.setMode(PullToRefreshBase.Mode.BOTH);

        //3.通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别(也就是设置向下拉的时候头部里面显示的文字)
        //此时这里设置的是下拉刷新的时候显示的文字,所以第一个设置true表示现在是刷新,第二个设置为false
        startLabels = refreshScrollView.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("下拉刷新");
        startLabels.setRefreshingLabel("正在刷新...");
        startLabels.setReleaseLabel("放开刷新");

        ILoadingLayout endLabels = refreshScrollView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("上拉刷新");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");

        /**
         * 监听事件
         */
        refreshScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                getRefreshData();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                page_num++;
                getDataFromNet();
            }
        });


    }

    /**
     * 轮播图的方法
     */
    private void lunBoTu() {
        NetDataUtil.getData("http://v3.wufazhuce.com:8000/api/reading/index/?version=3.5.0&platform=android", getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {
                //这个结合记录轮播图的所有地址
                imageUrlList = new ArrayList<String>();

                //解析数据
                Gson gson = new Gson();

                LunBoBean lunBoBean = gson.fromJson(json, LunBoBean.class);

                List<LunBoBean.DataBean.EssayBean> essay = lunBoBean.getData().getEssay();

                for (LunBoBean.DataBean.EssayBean essayBean: essay) {
                    //essayBean.getAuthor().get(0).getWeb_url()
                    imageUrlList.add(essayBean.getAuthor().get(0).getWeb_url());
                }

                //此时应该根据图片的路径,加载图片,设置适配器
                ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getActivity(), imageUrlList);
                viewPager.setAdapter(viewPagerAdapter);

                //1.手动可以无限滑动....maxValue....把当前开始展示的位置放在足够大的某个位置
                viewPager.setCurrentItem(imageUrlList.size()*100000);

                //2.自动轮播
                handler.sendEmptyMessageDelayed(0,2000);

            }
        });

    }

    /**
     * 下拉刷新获取数据
     */
    private void getRefreshData() {
        NetDataUtil.getData("http://gank.io/api/data/Android/10/1", getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {
                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);
                //先清空一下数据
                list.clear();

                //添加到集合的最前边,,,,(0,,,,)
                list.addAll(0,dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //设置适配器之后停止刷新的操作
                refreshScrollView.onRefreshComplete();

                //可以设置刷新的时间....
                startLabels.setLastUpdatedLabel("上次更新时间:"+new SimpleDateFormat("HH:mm").format(new Date(System.currentTimeMillis())));//last最近的,最后一次update修改/更新
            }
        });

    }

    /**
     * 刚开始进入页面获取网络数据....还可以作为上拉加载获取数据的操作
     *
     *
     */
    private void getDataFromNet() {
        //第一个参数是接口,第二个上下文,第三个回调json数据
        NetDataUtil.getData("http://gank.io/api/data/Android/10/"+page_num, getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {

                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);

                //往后面添加...
                list.addAll(dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //停止刷新
                refreshScrollView.onRefreshComplete();
            }
        });

    }

    /**
     * 设置适配器的方法
     */
    private void setAdapter() {
        if (listViewAdapter == null){
            listViewAdapter = new ListViewAdapter(getActivity(),list);
            listView.setAdapter(listViewAdapter);
        }else {
            listViewAdapter.notifyDataSetChanged();
        }

    }
}
——————————————————————————————————————————————
fragment_listview_layout.xml
————————————————————————————————————————————-————
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--中多了几个属性 分别以ptr开头,这是指定pullToRefreshListView在刷新的时候出现的特效,
    比如ptrDrawable第一个是指定刷新时显示的图片,ptrAnimationStyle第二个是指定刷新的图片以何种方式显示出来,
    ptrHeaderBackground第三个是指定刷新时头部的背景,ptrHeaderTextColor第四个是指定刷新时头部字体的颜色。-->

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/refresh_list_view"
        ptr:ptrDrawable="@drawable/default_ptr_flip"
        ptr:ptrAnimationStyle="flip"
        ptr:ptrHeaderBackground="#383838"
        ptr:ptrHeaderTextColor="#FFFFFF"  >

    </com.handmark.pulltorefresh.library.PullToRefreshListView>

</LinearLayout>
————————————————————————————————————————————
fragment_gridview_layout.xml
————————————————————————————————————————————————
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--中多了几个属性 分别以ptr开头,这是指定pullToRefreshListView在刷新的时候出现的特效,
    比如ptrDrawable第一个是指定刷新时显示的图片,ptrAnimationStyle第二个是指定刷新的图片以何种方式显示出来,
    ptrHeaderBackground第三个是指定刷新时头部的背景,ptrHeaderTextColor第四个是指定刷新时头部字体的颜色。-->

    <com.handmark.pulltorefresh.library.PullToRefreshGridView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:numColumns="2"
        android:id="@+id/refresh_grid_view"
        ptr:ptrDrawable="@drawable/default_ptr_flip"
        ptr:ptrAnimationStyle="flip"
        ptr:ptrHeaderBackground="#383838"
        ptr:ptrHeaderTextColor="#FFFFFF"  >

    </com.handmark.pulltorefresh.library.PullToRefreshGridView>


</LinearLayout>
————————————————————————————————————————————
fragment_scroll_layout.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:orientation="vertical">


    <!--中多了几个属性 分别以ptr开头,这是指定pullToRefreshListView在刷新的时候出现的特效,
    比如ptrDrawable第一个是指定刷新时显示的图片,ptrAnimationStyle第二个是指定刷新的图片以何种方式显示出来,
    ptrHeaderBackground第三个是指定刷新时头部的背景,ptrHeaderTextColor第四个是指定刷新时头部字体的颜色。-->

    <com.handmark.pulltorefresh.library.PullToRefreshScrollView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:id="@+id/refresh_scroll_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ptr:ptrAnimationStyle="flip"
        ptr:ptrDrawable="@drawable/default_ptr_flip"
        ptr:ptrHeaderBackground="#383838"
        ptr:ptrHeaderTextColor="#FFFFFF">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <android.support.v4.view.ViewPager
                android:id="@+id/image_view_pager"
                android:layout_width="match_parent"
                android:layout_height="200dp">

            </android.support.v4.view.ViewPager>

            <news1510a.bawei.com.a16_pulltorefresh_demo.view.MyListView
                android:id="@+id/scroll_list_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

            </news1510a.bawei.com.a16_pulltorefresh_demo.view.MyListView>
        </LinearLayout>


    </com.handmark.pulltorefresh.library.PullToRefreshScrollView>




</LinearLayout>
————————————————————————————————————————————
ListViewAdapter
——————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

import news1510a.bawei.com.a16_pulltorefresh_demo.R;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.DataDataBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.util.ImageLoaderUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 *
 * 多条目加载
 */
public class ListViewAdapter extends BaseAdapter {
    Context context;
    List<DataDataBean.ResultsBean> list;
    private int TEXT_ONLY = 0;
    private int IMAGE_TEXT = 1;

    public ListViewAdapter(Context context, List<DataDataBean.ResultsBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public int getViewTypeCount() {//返回有多少种条目的视图
        return 2;
    }

    @Override
    public int getItemViewType(int position) {//返回当前条目视图的类型

        //根据当前位置是否有图片决定,该条目的类型是什么
        if (list.get(position).getImages() != null){
            return IMAGE_TEXT;
        }

        return TEXT_ONLY;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (getItemViewType(i) == TEXT_ONLY){
            TextHolder holder;
            if (view == null){
                view = View.inflate(context, R.layout.item_text_layout,null);
                holder = new TextHolder();

                holder.textView = view.findViewById(R.id.text_title);

                view.setTag(holder);


            }else {
                holder = (TextHolder) view.getTag();
            }

            holder.textView.setText(list.get(i).getDesc());

        }else if (getItemViewType(i) == IMAGE_TEXT){

            ImageHolder holder;
            if (view == null){
                view = View.inflate(context, R.layout.item_image_layout,null);
                holder = new ImageHolder();

                holder.textView = view.findViewById(R.id.text_title);
                holder.imageView = view.findViewById(R.id.image_view);

                view.setTag(holder);


            }else {
                holder = (ImageHolder) view.getTag();
            }

            holder.textView.setText(list.get(i).getDesc());
            //设置图片的显示
            ImageLoader.getInstance().displayImage(list.get(i).getImages().get(0),holder.imageView, ImageLoaderUtil.getRoundOption());


        }

        return view;
    }

    private class TextHolder{
        TextView textView;
    }
    private class ImageHolder{
        TextView textView;
        ImageView imageView;
    }
}
————————————————————————————————————
GridViewAdapter
————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

import news1510a.bawei.com.a16_pulltorefresh_demo.R;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.DataDataBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.util.ImageLoaderUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public class GridViewAdapter extends BaseAdapter {
    Context context;
    List<DataDataBean.ResultsBean> list;

    public GridViewAdapter(Context context, List<DataDataBean.ResultsBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if (view == null){
            view = View.inflate(context,R.layout.item_gridviewlayout,null);
            holder = new ViewHolder();

            holder.textView = view.findViewById(R.id.grid_text);
            holder.imageView = view.findViewById(R.id.grid_image);

            view.setTag(holder);

        }else {
            holder = (ViewHolder) view.getTag();
        }

        holder.textView.setText(list.get(i).getDesc());
        //展示图片的时候,,,getImages这个集合有的有,有的为空...所以要进行.判断
        if (list.get(i).getImages() != null){
            //此时加载图片显示
            ImageLoader.getInstance().displayImage(list.get(i).getImages().get(0),holder.imageView, ImageLoaderUtil.getDefaultOption());
        }

        return view;
    }

    private class ViewHolder{
        TextView textView;
        ImageView imageView;
    }
}
——————————————————————————————————————
ViewPagerAdapter
————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.adapter;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

import news1510a.bawei.com.a16_pulltorefresh_demo.util.ImageLoaderUtil;

/**
 * @author Dash
 * @date 2017/10/19
 * @description:
 */
public class ViewPagerAdapter extends PagerAdapter {
    Context context;
    List<String> imageUrlList;

    public ViewPagerAdapter(Context context, List<String> imageUrlList) {
        this.context = context;
        this.imageUrlList = imageUrlList;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //1.创建imageView...添加到容器中
        ImageView imageView = new ImageView(context);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);

        //展示图片
        ImageLoader.getInstance().displayImage(imageUrlList.get(position%imageUrlList.size()),imageView, ImageLoaderUtil.getDefaultOption());

        //添加
        container.addView(imageView);

        //2.返回当前展示的imageView控件
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}
————————————————————————————————
BaseApplication
——————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.application;

import android.app.Application;

import news1510a.bawei.com.a16_pulltorefresh_demo.util.ImageLoaderUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public class BaseApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //初始化
        ImageLoaderUtil.init(this);
    }
}
——————————————————————————————————————————
DataDataBean 
————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.bean;

import java.util.List;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public class DataDataBean {

    /**
     * error : false
     * results : [{"_id":"59de2f22421aa90fe50c015c","createdAt":"2017-10-11T22:48:02.721Z","desc":"用 Kotlin 实现的基于物理的动画","images":["http://img.gank.io/58925abb-3e11-4d6e-9e44-a4567c03d03f"],"publishedAt":"2017-10-17T13:10:43.731Z","source":"web","type":"Android","url":"https://github.com/sagar-viradiya/AndroidPhysicsAnimation","used":true,"who":" Thunder Bouble"},{"_id":"59e46c6a421aa90fe50c0174","createdAt":"2017-10-16T16:23:06.637Z","desc":"Android 通用圆角布局,快速实现圆角需求。","images":["http://img.gank.io/4d9b99ba-cc97-4ef8-b834-477ad8a97100"],"publishedAt":"2017-10-17T13:10:43.731Z","source":"web","type":"Android","url":"https://github.com/GcsSloop/rclayout","used":true,"who":"sloop"},{"_id":"59e46c89421aa90fe7253598","createdAt":"2017-10-16T16:23:37.313Z","desc":"Android 加密工具包。","publishedAt":"2017-10-17T13:10:43.731Z","source":"web","type":"Android","url":"https://github.com/GcsSloop/encrypt","used":true,"who":"sloop"},{"_id":"59e55ecd421aa90fe725359c","createdAt":"2017-10-17T09:37:17.526Z","desc":"一个用 Kotlin 写的轻量级 URL 路由器框架","publishedAt":"2017-10-17T13:10:43.731Z","source":"web","type":"Android","url":"https://github.com/twocity/linker","used":true,"who":"ZhangTitanjum"},{"_id":"59e5740f421aa90fe725359f","createdAt":"2017-10-17T11:07:59.933Z","desc":"Android面试指南:我们需要怎样的工程师,我们需要成为怎样的工程师?","publishedAt":"2017-10-17T13:10:43.731Z","source":"web","type":"Android","url":"https://mp.weixin.qq.com/s?__biz=MzU4MjAzNTAwMA==&mid=2247483781&idx=2&sn=c5ef46cea309df058d2b168fada6dec0&chksm=fdbf32d2cac8bbc4b7f373c76bfc4d2447717634fdbc5afae565cca92551bfd152b329d5e103#rd","used":true,"who":null},{"_id":"59df3eac421aa90fef20347c","createdAt":"2017-10-12T18:06:36.692Z","desc":"文章中详实说明利用Cmake构造Ndk库需要注意的问题,以及部分Cmake命令的解读。","publishedAt":"2017-10-16T12:19:20.311Z","source":"web","type":"Android","url":"http://blog.csdn.net/qq_34902522/article/details/78144127","used":true,"who":null},{"_id":"59e1b47b421aa90fef203481","createdAt":"2017-10-14T14:53:47.998Z","desc":"详细介绍java垃圾回收的过程及相关算法","publishedAt":"2017-10-16T12:19:20.311Z","source":"chrome","type":"Android","url":"https://mp.weixin.qq.com/s?__biz=MzIwODI3MTc2Ng==&mid=2649647405&idx=1&sn=46a48cedd1540a994cd316ca164e005a&chksm=8f1f69d4b868e0c25245676ac55dc8d1fcad3dfa4bc63a2e0835b0a1155f1d2320a45a7c7078#rd","used":true,"who":"技术特工队"},{"_id":"59e4092c421aa90fe50c016d","createdAt":"2017-10-16T09:19:40.793Z","desc":"几条小经验帮你美化你的GitHub开源项目","publishedAt":"2017-10-16T12:19:20.311Z","source":"web","type":"Android","url":"https://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247487344&idx=1&sn=744a9ebc0425fb3fa17c3f62eb59e421","used":true,"who":"陈宇明"},{"_id":"59dc7149421aa94e07d18490","createdAt":"2017-10-10T15:05:45.902Z","desc":"使用 Kotlin 实现的一个 Dribbble 客户端","images":["http://img.gank.io/05d6552f-97ba-4d52-ad33-3caeba5cb327","http://img.gank.io/84594f1b-d10e-42a3-afc1-c7d2bf9ac0cf"],"publishedAt":"2017-10-11T12:40:42.545Z","source":"web","type":"Android","url":"https://github.com/armcha/Ribble","used":true,"who":" Thunder Bouble"},{"_id":"59dcca81421aa94e0053bddf","createdAt":"2017-10-10T21:26:25.797Z","desc":"最近在给某某银行做项目的时,涉及到了数据埋点,性能监控等问题,那我们起先想到的有两种方案,方案之一就是借助第三方,比如友盟、Bugly等,由于项目是部署在银行的网络框架之内的,所以该方案不可行。","publishedAt":"2017-10-11T12:40:42.545Z","source":"web","type":"Android","url":"https://mp.weixin.qq.com/s?__biz=MzIyMjQ0MTU0NA==&mid=2247484445&idx=1&sn=8eef04a7932b58ef0012643db228fb32&chksm=e82c3d3adf5bb42c88333160a88c7b05fb5f45798434afa956fe1f1a58c7713ef121c7ea0af4&scene=0&key=7460e137ddd94f92f668e812cfc0aef8fde2bdf7943c7409875cce12a3baed3526f31e4a707ed86896ee8ddbbf761bb2f09b2d7406c3b9016589495240d835d967a2141231c43d084635a7df11647fb0&ascene=0&uin=MjMzMzgwOTEwMQ%3D%3D&devicetype=iMac+MacBookPro12%2C1+OSX+OSX+10.10.5+build(14F27)&version=11020201&pass_ticket=54ym37fDoXgDZm7nzjGt6KNDR9%2F9ZIU8%2Bo5kNcGEXqi8GKijls6et5TXcXxbERi%2F","used":true,"who":"Tamic (码小白)"}]
     */

    private boolean error;
    private List<ResultsBean> results;

    public boolean isError() {
        return error;
    }

    public void setError(boolean error) {
        this.error = error;
    }

    public List<ResultsBean> getResults() {
        return results;
    }

    public void setResults(List<ResultsBean> results) {
        this.results = results;
    }

    public static class ResultsBean {
        /**
         * _id : 59de2f22421aa90fe50c015c
         * createdAt : 2017-10-11T22:48:02.721Z
         * desc : 用 Kotlin 实现的基于物理的动画
         * images : ["http://img.gank.io/58925abb-3e11-4d6e-9e44-a4567c03d03f"]
         * publishedAt : 2017-10-17T13:10:43.731Z
         * source : web
         * type : Android
         * url : https://github.com/sagar-viradiya/AndroidPhysicsAnimation
         * used : true
         * who :  Thunder Bouble
         */

        private String _id;
        private String createdAt;
        private String desc;
        private String publishedAt;
        private String source;
        private String type;
        private String url;
        private boolean used;
        private String who;
        private List<String> images;

        public String get_id() {
            return _id;
        }

        public void set_id(String _id) {
            this._id = _id;
        }

        public String getCreatedAt() {
            return createdAt;
        }

        public void setCreatedAt(String createdAt) {
            this.createdAt = createdAt;
        }

        public String getDesc() {
            return desc;
        }

        public void setDesc(String desc) {
            this.desc = desc;
        }

        public String getPublishedAt() {
            return publishedAt;
        }

        public void setPublishedAt(String publishedAt) {
            this.publishedAt = publishedAt;
        }

        public String getSource() {
            return source;
        }

        public void setSource(String source) {
            this.source = source;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public boolean isUsed() {
            return used;
        }

        public void setUsed(boolean used) {
            this.used = used;
        }

        public String getWho() {
            return who;
        }

        public void setWho(String who) {
            this.who = who;
        }

        public List<String> getImages() {
            return images;
        }

        public void setImages(List<String> images) {
            this.images = images;
        }
    }
}
————————————————————————————————————————————————
LunBoBean 
————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.bean;

import java.util.List;

/**
 * @author Dash
 * @date 2017/10/19
 * @description:
 */
public class LunBoBean {

    /**
     * res : 0
     * data : {"essay":[{"content_id":"2867","hp_title":"200万很好啊,但我就想要5000月薪","hp_makettime":"2017-10-19 06:00:00","guide_word":"你以为自己是天才枪手,其实只是炮灰。","start_video":"","author":[{"user_id":"7181466","user_name":"十三妹丁无畏","desc":"菜鸟乐评小编,专业观众。不客观,杂食,偏爱postpunk&newwave。超典型射手,LGBTQ人权平等拥护。\r\n微博:@十三妹丁无畏","wb_name":"@十三妹丁无畏","is_settled":"0","settled_type":"0","summary":"音乐编辑","fans_total":"2995","web_url":"http://image.wufazhuce.com/Fng58eK6AcGwxDjTftvM4_j9DfeB"}],"has_audio":false,"author_list":[{"user_id":"7181466","user_name":"十三妹丁无畏","desc":"菜鸟乐评小编,专业观众。不客观,杂食,偏爱postpunk&newwave。超典型射手,LGBTQ人权平等拥护。\r\n微博:@十三妹丁无畏","wb_name":"@十三妹丁无畏","is_settled":"0","settled_type":"0","summary":"音乐编辑","fans_total":"2995","web_url":"http://image.wufazhuce.com/Fng58eK6AcGwxDjTftvM4_j9DfeB"}]},{"content_id":"2866","hp_title":"去屠宰场谈恋爱好吗?","hp_makettime":"2017-10-19 06:00:00","guide_word":"无论从哪条路走下来,都会跌入相同滑道,相同结局。","start_video":"","author":[{"user_id":"6859004","user_name":"兔草","desc":"生于武汉,现居上海。写小说、评论、剧本等。小说见ONE、豆瓣、《野草》等。","wb_name":"@兔草啊吐槽","is_settled":"0","settled_type":"0","summary":"退役文案,杂耍写手","fans_total":"60","web_url":"http://image.wufazhuce.com/FmIxumvucSMThvBqzjla4dEmFbwL"}],"has_audio":false,"author_list":[{"user_id":"6859004","user_name":"兔草","desc":"生于武汉,现居上海。写小说、评论、剧本等。小说见ONE、豆瓣、《野草》等。","wb_name":"@兔草啊吐槽","is_settled":"0","settled_type":"0","summary":"退役文案,杂耍写手","fans_total":"60","web_url":"http://image.wufazhuce.com/FmIxumvucSMThvBqzjla4dEmFbwL"}]},{"content_id":"2863","hp_title":"冬日恶狠狠清单","hp_makettime":"2017-10-18 06:00:00","guide_word":"生活里一切都很好,只是我的内心仍有风暴肆虐。","start_video":"","author":[{"user_id":"4813757","user_name":"苏更生","desc":"「一个」App常驻作家,微信公众号:hulizhai","wb_name":"@假苏更生","is_settled":"0","settled_type":"0","summary":"「一个」App常驻作家,微信公众号:hulizhai","fans_total":"17249","web_url":"http://image.wufazhuce.com/Fg_e6teZsb3lZ1QStYtdnAkh6bO8"}],"has_audio":false,"author_list":[{"user_id":"4813757","user_name":"苏更生","desc":"「一个」App常驻作家,微信公众号:hulizhai","wb_name":"@假苏更生","is_settled":"0","settled_type":"0","summary":"「一个」App常驻作家,微信公众号:hulizhai","fans_total":"17249","web_url":"http://image.wufazhuce.com/Fg_e6teZsb3lZ1QStYtdnAkh6bO8"}]},{"content_id":"2862","hp_title":"关于她的命运","hp_makettime":"2017-10-18 06:00:00","guide_word":"两手空空。我们就这样迎向了未来。","start_video":"","author":[{"user_id":"4813479","user_name":"荞麦","desc":"「一个」常驻作家。最新随笔集《当一切在我们周围暗下来》。","wb_name":"@荞麦chen","is_settled":"0","settled_type":"0","summary":"「一个」常驻作家。最新随笔集《当一切在我们周围暗下来》。","fans_total":"4959","web_url":"http://image.wufazhuce.com/FsRokzycWWx_CucHTFUN4OFBh5s6"}],"has_audio":true,"author_list":[{"user_id":"4813479","user_name":"荞麦","desc":"「一个」常驻作家。最新随笔集《当一切在我们周围暗下来》。","wb_name":"@荞麦chen","is_settled":"0","settled_type":"0","summary":"「一个」常驻作家。最新随笔集《当一切在我们周围暗下来》。","fans_total":"4959","web_url":"http://image.wufazhuce.com/FsRokzycWWx_CucHTFUN4OFBh5s6"}]},{"content_id":"2861","hp_title":"附近的人","hp_makettime":"2017-10-17 06:00:00","guide_word":"她整个人被震荡着,被拖走,被摇撼。她情不自禁地发出低声的尖叫。","start_video":"","author":[{"user_id":"7867217","user_name":"MENG","desc":"MENG,MeRead读书会创办人,不务正业写作者。","wb_name":"@萌之刺刺","is_settled":"0","settled_type":"0","summary":"MeRead创办人,不务正业写作者。","fans_total":"1329","web_url":"http://image.wufazhuce.com/Fjs4uDTgQAXnIOPEvnnIIA7HdBxS"}],"has_audio":true,"author_list":[{"user_id":"7867217","user_name":"MENG","desc":"MENG,MeRead读书会创办人,不务正业写作者。","wb_name":"@萌之刺刺","is_settled":"0","settled_type":"0","summary":"MeRead创办人,不务正业写作者。","fans_total":"1329","web_url":"http://image.wufazhuce.com/Fjs4uDTgQAXnIOPEvnnIIA7HdBxS"}]},{"content_id":"2860","hp_title":"我说过的每一句谎,都是因为我爱你","hp_makettime":"2017-10-16 06:00:00","guide_word":"你要是爱他,就得说谎,不管你愿不愿意。","start_video":"","author":[{"user_id":"7898995","user_name":"李开春","desc":"爱国儿女,鸡汤爱好者,不务正业的理工女。","wb_name":"@李开开开春","is_settled":"0","settled_type":"0","summary":"爱国儿女,鸡汤爱好者,不务正业的理工女。","fans_total":"6794","web_url":"http://image.wufazhuce.com/FuCd1X9lLbWuu3Ps_aoMd8vJjQml"}],"has_audio":false,"author_list":[{"user_id":"7898995","user_name":"李开春","desc":"爱国儿女,鸡汤爱好者,不务正业的理工女。","wb_name":"@李开开开春","is_settled":"0","settled_type":"0","summary":"爱国儿女,鸡汤爱好者,不务正业的理工女。","fans_total":"6794","web_url":"http://image.wufazhuce.com/FuCd1X9lLbWuu3Ps_aoMd8vJjQml"}]},{"content_id":"2859","hp_title":"建设北路32号B栋","hp_makettime":"2017-10-16 06:00:00","guide_word":"人活着就是在积分的话,三十年能换个什么狗屁东西呢?","start_video":"","author":[{"user_id":"7448679","user_name":"阿枣","desc":"写作者,翻译。","wb_name":"","is_settled":"0","settled_type":"0","summary":"写作者,翻译。","fans_total":"44","web_url":"http://image.wufazhuce.com/FjM-TK7UjhU11Rdshf-a6SeA2_uL"}],"has_audio":true,"author_list":[{"user_id":"7448679","user_name":"阿枣","desc":"写作者,翻译。","wb_name":"","is_settled":"0","settled_type":"0","summary":"写作者,翻译。","fans_total":"44","web_url":"http://image.wufazhuce.com/FjM-TK7UjhU11Rdshf-a6SeA2_uL"}]},{"content_id":"2858","hp_title":"另一个空间","hp_makettime":"2017-10-15 06:00:00","guide_word":"你说,这是不是童话故事?","start_video":"","author":[{"user_id":"7754467","user_name":"程皎旸","desc":"旅居香港,曾获香港青年文学奖。公众号:薄荷子弹。","wb_name":"@程皎旸-","is_settled":"0","settled_type":"0","summary":"青年作家,记者。","fans_total":"786","web_url":"http://image.wufazhuce.com/Fl5nYa_3VrmE5_42lRc8pF5hsypQ"}],"has_audio":false,"author_list":[{"user_id":"7754467","user_name":"程皎旸","desc":"旅居香港,曾获香港青年文学奖。公众号:薄荷子弹。","wb_name":"@程皎旸-","is_settled":"0","settled_type":"0","summary":"青年作家,记者。","fans_total":"786","web_url":"http://image.wufazhuce.com/Fl5nYa_3VrmE5_42lRc8pF5hsypQ"}]},{"content_id":"2856","hp_title":"贱兮兮地给所有人点赞","hp_makettime":"2017-10-15 06:00:00","guide_word":"它像一幅数字版清明上河图,卷首已然人山人海。","start_video":"","author":[{"user_id":"7654034","user_name":"黄集伟","desc":"黄集伟,专栏作者,曾有\u201c阅读笔记\u201d系列、\u201c语词笔记\u201d系列、《孤岛访谈录》等闲书出版。","wb_name":"","is_settled":"0","settled_type":"0","summary":"黄集伟,专栏作者。","fans_total":"3731","web_url":"http://image.wufazhuce.com/FvVmWbqlle7jlUCTeozoval9NyBH"}],"has_audio":false,"author_list":[{"user_id":"7654034","user_name":"黄集伟","desc":"黄集伟,专栏作者,曾有\u201c阅读笔记\u201d系列、\u201c语词笔记\u201d系列、《孤岛访谈录》等闲书出版。","wb_name":"","is_settled":"0","settled_type":"0","summary":"黄集伟,专栏作者。","fans_total":"3731","web_url":"http://image.wufazhuce.com/FvVmWbqlle7jlUCTeozoval9NyBH"}]},{"content_id":"2857","hp_title":"女孩们的友谊","hp_makettime":"2017-10-14 06:00:00","guide_word":"起码她的包没有我的贵。","start_video":"","author":[{"user_id":"5553913","user_name":"周苏婕","desc":"周苏婕,青年作家。微信公众号:sujiewriting","wb_name":"@anan周苏婕","is_settled":"0","settled_type":"0","summary":"周苏婕,青年作家。微信公众号:sujiewriting","fans_total":"1936","web_url":"http://image.wufazhuce.com/FmDRnQ1XhReHRHB4jYqAPSx8htsP"}],"has_audio":false,"author_list":[{"user_id":"5553913","user_name":"周苏婕","desc":"周苏婕,青年作家。微信公众号:sujiewriting","wb_name":"@anan周苏婕","is_settled":"0","settled_type":"0","summary":"周苏婕,青年作家。微信公众号:sujiewriting","fans_total":"1936","web_url":"http://image.wufazhuce.com/FmDRnQ1XhReHRHB4jYqAPSx8htsP"}]}],"serial":[{"id":"445","serial_id":"50","number":"9","title":"相亲攻略手册(7)·七月,悲喜交加(下)","excerpt":"我很感谢他最后没有跟我说抱歉,或者跟我说,我是个好姑娘。","read_num":"18800","maketime":"2017-10-19 06:00:00","start_video":"","author":{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"},"has_audio":false,"author_list":[{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"}],"serial_list":["430","431","434","435","437","438","444","439","445"]},{"id":"452","serial_id":"49","number":"10","title":"我在三十岁的第一年 II · 第十话","excerpt":"人生就是一场大型错位。","read_num":"32200","maketime":"2017-10-18 06:00:00","start_video":"","author":{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"},"has_audio":false,"author_list":[{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"}],"serial_list":["428","429","433","436","440","442","448","449","450","452"]},{"id":"439","serial_id":"50","number":"8","title":"相亲攻略手册(7)·七月,悲喜交加(上)","excerpt":"我想等的人,也不再是你。","read_num":"39200","maketime":"2017-10-17 06:00:00","start_video":"","author":{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"},"has_audio":false,"author_list":[{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"}],"serial_list":["430","431","434","435","437","438","444","439","445"]},{"id":"450","serial_id":"49","number":"9","title":"我在三十岁的第一年 II · 第九话","excerpt":"如果一个人被迫过着清心寡欲的生活,只要有一个机会,她就会跑向纵情享乐。","read_num":"39800","maketime":"2017-10-16 06:00:00","start_video":"","author":{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"},"has_audio":false,"author_list":[{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"}],"serial_list":["428","429","433","436","440","442","448","449","450","452"]},{"id":"444","serial_id":"50","number":"7","title":"相亲攻略手册(6)·六月,青草盛开(下)","excerpt":"他始终横亘在我的生活里,就像是心头一根温和的刺。","read_num":"42100","maketime":"2017-10-14 06:00:00","start_video":"","author":{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"},"has_audio":false,"author_list":[{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"}],"serial_list":["430","431","434","435","437","438","444","439","445"]},{"id":"449","serial_id":"49","number":"8","title":"我在三十岁的第一年 II · 第八话","excerpt":"日常生活给再多奇迹,也总是乏味和平庸的结尾最多。","read_num":"43300","maketime":"2017-10-13 06:00:00","start_video":"","author":{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"},"has_audio":false,"author_list":[{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"}],"serial_list":["428","429","433","436","440","442","448","449","450","452"]},{"id":"438","serial_id":"50","number":"6","title":"相亲攻略手册(6)·六月,青草盛开(上)","excerpt":"但谁知道,终究是一语成谶。","read_num":"45400","maketime":"2017-10-12 06:00:00","start_video":"","author":{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"},"has_audio":false,"author_list":[{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"}],"serial_list":["430","431","434","435","437","438","444","439","445"]},{"id":"448","serial_id":"49","number":"7","title":"我在三十岁的第一年 II · 第七话","excerpt":"人所有一切的行动,不过是遵循内心最强烈的愿望。","read_num":"42200","maketime":"2017-10-11 06:00:00","start_video":"","author":{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"},"has_audio":false,"author_list":[{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"}],"serial_list":["428","429","433","436","440","442","448","449","450","452"]},{"id":"437","serial_id":"50","number":"5","title":"相亲攻略手册(5)·五月,我们对面坐着","excerpt":"该死的小雀跃。","read_num":"47200","maketime":"2017-10-10 06:00:00","start_video":"","author":{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"},"has_audio":false,"author_list":[{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"}],"serial_list":["430","431","434","435","437","438","444","439","445"]},{"id":"442","serial_id":"49","number":"6","title":"我在三十岁的第一年 II · 第六话","excerpt":"我不是拜金,我只是习惯了金钱带来的快乐。","read_num":"50600","maketime":"2017-10-09 06:00:00","start_video":"","author":{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"},"has_audio":false,"author_list":[{"user_id":"4808838","user_name":"毛利","desc":"毛利,专栏作家。《我在三十岁的第一年》即将上市。","wb_name":"@毛利","is_settled":"0","settled_type":"0","summary":"专栏作家。","fans_total":"8235","web_url":"http://image.wufazhuce.com/Fl3AgUQb4i6WocmORrnhMPkcDkV4"}],"serial_list":["428","429","433","436","440","442","448","449","450","452"]}],"question":[{"question_id":"1888","question_title":"我们能为想自杀的人做点什么?","answer_title":"","answer_content":"不要对一个没有双腿的人说奔跑是一件多么轻松的事情。","question_makettime":"2017-10-19 06:00:00","start_video":"","author_list":[{"user_id":"7834279","user_name":"露易莎大能个儿","desc":"你想看到什么?","wb_name":"@露易莎大能个儿","is_settled":"0","settled_type":"0","summary":"朝阳区唯一的精灵。","fans_total":"680","web_url":"http://image.wufazhuce.com/FjREAxQyRS8OCKo9VJ1pmMFWCEKA"}],"asker_list":[{"user_id":"0","user_name":"高高","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1886","question_title":"受邀参加前任婚礼该怎么办?","answer_title":"","answer_content":"当初是你要分开,分开就分开,现在又要用婚礼,来抢我的钱。","question_makettime":"2017-10-18 06:00:00","start_video":"","author_list":[{"user_id":"0","user_name":"网友","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}],"asker_list":[{"user_id":"0","user_name":"丰博","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1887","question_title":"为人父母之后心境会有怎样的变化?","answer_title":"","answer_content":"当森林甬道遍布,我也只有祝福。","question_makettime":"2017-10-17 06:00:00","start_video":"","author_list":[{"user_id":"4814673","user_name":"刘墨闻","desc":"设计师,青年作者。@刘墨闻","wb_name":"","is_settled":"0","settled_type":"0","summary":"设计师,青年作者。","fans_total":"2113","web_url":"http://image.wufazhuce.com/FvHffjDa1ORrg83qhajnR_zhwJlg"}],"asker_list":[{"user_id":"0","user_name":"in_Mars","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1884","question_title":"世界上有会亏钱的老虎机吗?","answer_title":"","answer_content":"所有看似随机的人工结果背后都有迹可循。","question_makettime":"2017-10-16 06:00:00","start_video":"","author_list":[{"user_id":"0","user_name":"温义飞","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}],"asker_list":[{"user_id":"0","user_name":"老李","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1885","question_title":"智商高的人会缺少人情味儿吗?","answer_title":"","answer_content":"智商高的人会缺少人情味儿吗?","question_makettime":"2017-10-15 06:00:00","start_video":"","author_list":[{"user_id":"8185629","user_name":"行尸走肥肉","desc":"一位拥有三双拖鞋的便衣诗人。","wb_name":"@行尸走肥肉","is_settled":"0","settled_type":"0","summary":"一位拥有三双拖鞋的便衣诗人。","fans_total":"1495","web_url":"http://image.wufazhuce.com/FiE2WkXRL8Vf3k1683CDDgU7VqgM"}],"asker_list":[{"user_id":"0","user_name":"网友","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1883","question_title":"你有过哪些一见如故的经历?","answer_title":"","answer_content":"那种只看一眼就觉得遇到对的人的感觉,就像晒到了午后的太阳。","question_makettime":"2017-10-14 06:00:00","start_video":"","author_list":[{"user_id":"0","user_name":"网友","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}],"asker_list":[{"user_id":"0","user_name":"一个App工作室 ","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1882","question_title":"为什么会很难接受爱豆公开恋情?","answer_title":"","answer_content":"众生都坠入情网,你是我们唯一寄望。","question_makettime":"2017-10-13 06:00:00","start_video":"","author_list":[{"user_id":"0","user_name":"王花花","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}],"asker_list":[{"user_id":"0","user_name":"路小路","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1881","question_title":"吃多少苦才能过上幸福的生活?","answer_title":"","answer_content":"吃了这么多苦,只是为了过上普通人的生活。","question_makettime":"2017-10-12 06:00:00","start_video":"","author_list":[{"user_id":"8473724","user_name":"青崖白鹿","desc":"且放白鹿青崖间。","wb_name":"","is_settled":"0","settled_type":"0","summary":"且放白鹿青崖间。","fans_total":"312","web_url":"http://image.wufazhuce.com/FviXy-X_ds4zr1JIDd2TvvSfpvBO"}],"asker_list":[{"user_id":"0","user_name":"丁丁","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1880","question_title":"为什么傲慢是七宗罪之首?","answer_title":"","answer_content":"傲慢动摇了信仰的根基,使任何尝试性的沟通都无法成功。","question_makettime":"2017-10-11 06:00:00","start_video":"","author_list":[{"user_id":"4814646","user_name":"三三","desc":"律师,青年作者,一个全年出现的圣诞老人。","wb_name":"@三三坡","is_settled":"0","settled_type":"0","summary":"律师,青年作者,一个全年出现的圣诞老人。","fans_total":"510","web_url":"http://image.wufazhuce.com/Frilgx0XpHkpgggE2jzQM0rHbnVB"}],"asker_list":[{"user_id":"0","user_name":"皮卡诺","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]},{"question_id":"1879","question_title":"如果恋人不愿意公开恋情,你会怎么看待?","answer_title":"","answer_content":"确定不反思一下是不是自己太丑?","question_makettime":"2017-10-10 06:00:00","start_video":"","author_list":[{"user_id":"7523856","user_name":"网友","desc":"网友","wb_name":"","is_settled":"0","settled_type":"0","summary":"网友","fans_total":"488","web_url":"http://image.wufazhuce.com/Fvx6SPugEWRuXLvAkuB7gCGaHRjR"}],"asker_list":[{"user_id":"0","user_name":"勺哥","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]}]}
     */

    private int res;
    private DataBean data;

    public int getRes() {
        return res;
    }

    public void setRes(int res) {
        this.res = res;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        private List<EssayBean> essay;
        private List<SerialBean> serial;
        private List<QuestionBean> question;

        public List<EssayBean> getEssay() {
            return essay;
        }

        public void setEssay(List<EssayBean> essay) {
            this.essay = essay;
        }

        public List<SerialBean> getSerial() {
            return serial;
        }

        public void setSerial(List<SerialBean> serial) {
            this.serial = serial;
        }

        public List<QuestionBean> getQuestion() {
            return question;
        }

        public void setQuestion(List<QuestionBean> question) {
            this.question = question;
        }

        public static class EssayBean {
            /**
             * content_id : 2867
             * hp_title : 200万很好啊,但我就想要5000月薪
             * hp_makettime : 2017-10-19 06:00:00
             * guide_word : 你以为自己是天才枪手,其实只是炮灰。
             * start_video :
             * author : [{"user_id":"7181466","user_name":"十三妹丁无畏","desc":"菜鸟乐评小编,专业观众。不客观,杂食,偏爱postpunk&newwave。超典型射手,LGBTQ人权平等拥护。\r\n微博:@十三妹丁无畏","wb_name":"@十三妹丁无畏","is_settled":"0","settled_type":"0","summary":"音乐编辑","fans_total":"2995","web_url":"http://image.wufazhuce.com/Fng58eK6AcGwxDjTftvM4_j9DfeB"}]
             * has_audio : false
             * author_list : [{"user_id":"7181466","user_name":"十三妹丁无畏","desc":"菜鸟乐评小编,专业观众。不客观,杂食,偏爱postpunk&newwave。超典型射手,LGBTQ人权平等拥护。\r\n微博:@十三妹丁无畏","wb_name":"@十三妹丁无畏","is_settled":"0","settled_type":"0","summary":"音乐编辑","fans_total":"2995","web_url":"http://image.wufazhuce.com/Fng58eK6AcGwxDjTftvM4_j9DfeB"}]
             */

            private String content_id;
            private String hp_title;
            private String hp_makettime;
            private String guide_word;
            private String start_video;
            private boolean has_audio;
            private List<AuthorBean> author;
            private List<AuthorListBean> author_list;

            public String getContent_id() {
                return content_id;
            }

            public void setContent_id(String content_id) {
                this.content_id = content_id;
            }

            public String getHp_title() {
                return hp_title;
            }

            public void setHp_title(String hp_title) {
                this.hp_title = hp_title;
            }

            public String getHp_makettime() {
                return hp_makettime;
            }

            public void setHp_makettime(String hp_makettime) {
                this.hp_makettime = hp_makettime;
            }

            public String getGuide_word() {
                return guide_word;
            }

            public void setGuide_word(String guide_word) {
                this.guide_word = guide_word;
            }

            public String getStart_video() {
                return start_video;
            }

            public void setStart_video(String start_video) {
                this.start_video = start_video;
            }

            public boolean isHas_audio() {
                return has_audio;
            }

            public void setHas_audio(boolean has_audio) {
                this.has_audio = has_audio;
            }

            public List<AuthorBean> getAuthor() {
                return author;
            }

            public void setAuthor(List<AuthorBean> author) {
                this.author = author;
            }

            public List<AuthorListBean> getAuthor_list() {
                return author_list;
            }

            public void setAuthor_list(List<AuthorListBean> author_list) {
                this.author_list = author_list;
            }

            public static class AuthorBean {
                /**
                 * user_id : 7181466
                 * user_name : 十三妹丁无畏
                 * desc : 菜鸟乐评小编,专业观众。不客观,杂食,偏爱postpunk&newwave。超典型射手,LGBTQ人权平等拥护。
                 微博:@十三妹丁无畏
                 * wb_name : @十三妹丁无畏
                 * is_settled : 0
                 * settled_type : 0
                 * summary : 音乐编辑
                 * fans_total : 2995
                 * web_url : http://image.wufazhuce.com/Fng58eK6AcGwxDjTftvM4_j9DfeB
                 */

                private String user_id;
                private String user_name;
                private String desc;
                private String wb_name;
                private String is_settled;
                private String settled_type;
                private String summary;
                private String fans_total;
                private String web_url;

                public String getUser_id() {
                    return user_id;
                }

                public void setUser_id(String user_id) {
                    this.user_id = user_id;
                }

                public String getUser_name() {
                    return user_name;
                }

                public void setUser_name(String user_name) {
                    this.user_name = user_name;
                }

                public String getDesc() {
                    return desc;
                }

                public void setDesc(String desc) {
                    this.desc = desc;
                }

                public String getWb_name() {
                    return wb_name;
                }

                public void setWb_name(String wb_name) {
                    this.wb_name = wb_name;
                }

                public String getIs_settled() {
                    return is_settled;
                }

                public void setIs_settled(String is_settled) {
                    this.is_settled = is_settled;
                }

                public String getSettled_type() {
                    return settled_type;
                }

                public void setSettled_type(String settled_type) {
                    this.settled_type = settled_type;
                }

                public String getSummary() {
                    return summary;
                }

                public void setSummary(String summary) {
                    this.summary = summary;
                }

                public String getFans_total() {
                    return fans_total;
                }

                public void setFans_total(String fans_total) {
                    this.fans_total = fans_total;
                }

                public String getWeb_url() {
                    return web_url;
                }

                public void setWeb_url(String web_url) {
                    this.web_url = web_url;
                }
            }

            public static class AuthorListBean {
                /**
                 * user_id : 7181466
                 * user_name : 十三妹丁无畏
                 * desc : 菜鸟乐评小编,专业观众。不客观,杂食,偏爱postpunk&newwave。超典型射手,LGBTQ人权平等拥护。
                 微博:@十三妹丁无畏
                 * wb_name : @十三妹丁无畏
                 * is_settled : 0
                 * settled_type : 0
                 * summary : 音乐编辑
                 * fans_total : 2995
                 * web_url : http://image.wufazhuce.com/Fng58eK6AcGwxDjTftvM4_j9DfeB
                 */

                private String user_id;
                private String user_name;
                private String desc;
                private String wb_name;
                private String is_settled;
                private String settled_type;
                private String summary;
                private String fans_total;
                private String web_url;

                public String getUser_id() {
                    return user_id;
                }

                public void setUser_id(String user_id) {
                    this.user_id = user_id;
                }

                public String getUser_name() {
                    return user_name;
                }

                public void setUser_name(String user_name) {
                    this.user_name = user_name;
                }

                public String getDesc() {
                    return desc;
                }

                public void setDesc(String desc) {
                    this.desc = desc;
                }

                public String getWb_name() {
                    return wb_name;
                }

                public void setWb_name(String wb_name) {
                    this.wb_name = wb_name;
                }

                public String getIs_settled() {
                    return is_settled;
                }

                public void setIs_settled(String is_settled) {
                    this.is_settled = is_settled;
                }

                public String getSettled_type() {
                    return settled_type;
                }

                public void setSettled_type(String settled_type) {
                    this.settled_type = settled_type;
                }

                public String getSummary() {
                    return summary;
                }

                public void setSummary(String summary) {
                    this.summary = summary;
                }

                public String getFans_total() {
                    return fans_total;
                }

                public void setFans_total(String fans_total) {
                    this.fans_total = fans_total;
                }

                public String getWeb_url() {
                    return web_url;
                }

                public void setWeb_url(String web_url) {
                    this.web_url = web_url;
                }
            }
        }

        public static class SerialBean {
            /**
             * id : 445
             * serial_id : 50
             * number : 9
             * title : 相亲攻略手册(7)·七月,悲喜交加(下)
             * excerpt : 我很感谢他最后没有跟我说抱歉,或者跟我说,我是个好姑娘。
             * read_num : 18800
             * maketime : 2017-10-19 06:00:00
             * start_video :
             * author : {"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"}
             * has_audio : false
             * author_list : [{"user_id":"4814710","user_name":"姚佳黛","desc":"喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。","wb_name":"","is_settled":"0","settled_type":"0","summary":"学医的见过手术室血肉横飞的文字编辑。 ","fans_total":"3336","web_url":"http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt"}]
             * serial_list : ["430","431","434","435","437","438","444","439","445"]
             */

            private String id;
            private String serial_id;
            private String number;
            private String title;
            private String excerpt;
            private String read_num;
            private String maketime;
            private String start_video;
            private AuthorBeanX author;
            private boolean has_audio;
            private List<AuthorListBeanX> author_list;
            private List<String> serial_list;

            public String getId() {
                return id;
            }

            public void setId(String id) {
                this.id = id;
            }

            public String getSerial_id() {
                return serial_id;
            }

            public void setSerial_id(String serial_id) {
                this.serial_id = serial_id;
            }

            public String getNumber() {
                return number;
            }

            public void setNumber(String number) {
                this.number = number;
            }

            public String getTitle() {
                return title;
            }

            public void setTitle(String title) {
                this.title = title;
            }

            public String getExcerpt() {
                return excerpt;
            }

            public void setExcerpt(String excerpt) {
                this.excerpt = excerpt;
            }

            public String getRead_num() {
                return read_num;
            }

            public void setRead_num(String read_num) {
                this.read_num = read_num;
            }

            public String getMaketime() {
                return maketime;
            }

            public void setMaketime(String maketime) {
                this.maketime = maketime;
            }

            public String getStart_video() {
                return start_video;
            }

            public void setStart_video(String start_video) {
                this.start_video = start_video;
            }

            public AuthorBeanX getAuthor() {
                return author;
            }

            public void setAuthor(AuthorBeanX author) {
                this.author = author;
            }

            public boolean isHas_audio() {
                return has_audio;
            }

            public void setHas_audio(boolean has_audio) {
                this.has_audio = has_audio;
            }

            public List<AuthorListBeanX> getAuthor_list() {
                return author_list;
            }

            public void setAuthor_list(List<AuthorListBeanX> author_list) {
                this.author_list = author_list;
            }

            public List<String> getSerial_list() {
                return serial_list;
            }

            public void setSerial_list(List<String> serial_list) {
                this.serial_list = serial_list;
            }

            public static class AuthorBeanX {
                /**
                 * user_id : 4814710
                 * user_name : 姚佳黛
                 * desc : 喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。
                 * wb_name :
                 * is_settled : 0
                 * settled_type : 0
                 * summary : 学医的见过手术室血肉横飞的文字编辑。
                 * fans_total : 3336
                 * web_url : http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt
                 */

                private String user_id;
                private String user_name;
                private String desc;
                private String wb_name;
                private String is_settled;
                private String settled_type;
                private String summary;
                private String fans_total;
                private String web_url;

                public String getUser_id() {
                    return user_id;
                }

                public void setUser_id(String user_id) {
                    this.user_id = user_id;
                }

                public String getUser_name() {
                    return user_name;
                }

                public void setUser_name(String user_name) {
                    this.user_name = user_name;
                }

                public String getDesc() {
                    return desc;
                }

                public void setDesc(String desc) {
                    this.desc = desc;
                }

                public String getWb_name() {
                    return wb_name;
                }

                public void setWb_name(String wb_name) {
                    this.wb_name = wb_name;
                }

                public String getIs_settled() {
                    return is_settled;
                }

                public void setIs_settled(String is_settled) {
                    this.is_settled = is_settled;
                }

                public String getSettled_type() {
                    return settled_type;
                }

                public void setSettled_type(String settled_type) {
                    this.settled_type = settled_type;
                }

                public String getSummary() {
                    return summary;
                }

                public void setSummary(String summary) {
                    this.summary = summary;
                }

                public String getFans_total() {
                    return fans_total;
                }

                public void setFans_total(String fans_total) {
                    this.fans_total = fans_total;
                }

                public String getWeb_url() {
                    return web_url;
                }

                public void setWeb_url(String web_url) {
                    this.web_url = web_url;
                }
            }

            public static class AuthorListBeanX {
                /**
                 * user_id : 4814710
                 * user_name : 姚佳黛
                 * desc : 喜欢码字儿的精分水瓶座菇凉,脑洞和食量一样大。过气网络小说作者,有一个公众号:头上没有草原的茸茸。
                 * wb_name :
                 * is_settled : 0
                 * settled_type : 0
                 * summary : 学医的见过手术室血肉横飞的文字编辑。
                 * fans_total : 3336
                 * web_url : http://image.wufazhuce.com/FoREns_Rl0UOQCYzdBuMAxX239Dt
                 */

                private String user_id;
                private String user_name;
                private String desc;
                private String wb_name;
                private String is_settled;
                private String settled_type;
                private String summary;
                private String fans_total;
                private String web_url;

                public String getUser_id() {
                    return user_id;
                }

                public void setUser_id(String user_id) {
                    this.user_id = user_id;
                }

                public String getUser_name() {
                    return user_name;
                }

                public void setUser_name(String user_name) {
                    this.user_name = user_name;
                }

                public String getDesc() {
                    return desc;
                }

                public void setDesc(String desc) {
                    this.desc = desc;
                }

                public String getWb_name() {
                    return wb_name;
                }

                public void setWb_name(String wb_name) {
                    this.wb_name = wb_name;
                }

                public String getIs_settled() {
                    return is_settled;
                }

                public void setIs_settled(String is_settled) {
                    this.is_settled = is_settled;
                }

                public String getSettled_type() {
                    return settled_type;
                }

                public void setSettled_type(String settled_type) {
                    this.settled_type = settled_type;
                }

                public String getSummary() {
                    return summary;
                }

                public void setSummary(String summary) {
                    this.summary = summary;
                }

                public String getFans_total() {
                    return fans_total;
                }

                public void setFans_total(String fans_total) {
                    this.fans_total = fans_total;
                }

                public String getWeb_url() {
                    return web_url;
                }

                public void setWeb_url(String web_url) {
                    this.web_url = web_url;
                }
            }
        }

        public static class QuestionBean {
            /**
             * question_id : 1888
             * question_title : 我们能为想自杀的人做点什么?
             * answer_title :
             * answer_content : 不要对一个没有双腿的人说奔跑是一件多么轻松的事情。
             * question_makettime : 2017-10-19 06:00:00
             * start_video :
             * author_list : [{"user_id":"7834279","user_name":"露易莎大能个儿","desc":"你想看到什么?","wb_name":"@露易莎大能个儿","is_settled":"0","settled_type":"0","summary":"朝阳区唯一的精灵。","fans_total":"680","web_url":"http://image.wufazhuce.com/FjREAxQyRS8OCKo9VJ1pmMFWCEKA"}]
             * asker_list : [{"user_id":"0","user_name":"高高","web_url":"http://image.wufazhuce.com/placeholder-author-avatar.png","summary":"","desc":"","is_settled":"","settled_type":"","fans_total":"","wb_name":""}]
             */

            private String question_id;
            private String question_title;
            private String answer_title;
            private String answer_content;
            private String question_makettime;
            private String start_video;
            private List<AuthorListBeanXX> author_list;
            private List<AskerListBean> asker_list;

            public String getQuestion_id() {
                return question_id;
            }

            public void setQuestion_id(String question_id) {
                this.question_id = question_id;
            }

            public String getQuestion_title() {
                return question_title;
            }

            public void setQuestion_title(String question_title) {
                this.question_title = question_title;
            }

            public String getAnswer_title() {
                return answer_title;
            }

            public void setAnswer_title(String answer_title) {
                this.answer_title = answer_title;
            }

            public String getAnswer_content() {
                return answer_content;
            }

            public void setAnswer_content(String answer_content) {
                this.answer_content = answer_content;
            }

            public String getQuestion_makettime() {
                return question_makettime;
            }

            public void setQuestion_makettime(String question_makettime) {
                this.question_makettime = question_makettime;
            }

            public String getStart_video() {
                return start_video;
            }

            public void setStart_video(String start_video) {
                this.start_video = start_video;
            }

            public List<AuthorListBeanXX> getAuthor_list() {
                return author_list;
            }

            public void setAuthor_list(List<AuthorListBeanXX> author_list) {
                this.author_list = author_list;
            }

            public List<AskerListBean> getAsker_list() {
                return asker_list;
            }

            public void setAsker_list(List<AskerListBean> asker_list) {
                this.asker_list = asker_list;
            }

            public static class AuthorListBeanXX {
                /**
                 * user_id : 7834279
                 * user_name : 露易莎大能个儿
                 * desc : 你想看到什么?
                 * wb_name : @露易莎大能个儿
                 * is_settled : 0
                 * settled_type : 0
                 * summary : 朝阳区唯一的精灵。
                 * fans_total : 680
                 * web_url : http://image.wufazhuce.com/FjREAxQyRS8OCKo9VJ1pmMFWCEKA
                 */

                private String user_id;
                private String user_name;
                private String desc;
                private String wb_name;
                private String is_settled;
                private String settled_type;
                private String summary;
                private String fans_total;
                private String web_url;

                public String getUser_id() {
                    return user_id;
                }

                public void setUser_id(String user_id) {
                    this.user_id = user_id;
                }

                public String getUser_name() {
                    return user_name;
                }

                public void setUser_name(String user_name) {
                    this.user_name = user_name;
                }

                public String getDesc() {
                    return desc;
                }

                public void setDesc(String desc) {
                    this.desc = desc;
                }

                public String getWb_name() {
                    return wb_name;
                }

                public void setWb_name(String wb_name) {
                    this.wb_name = wb_name;
                }

                public String getIs_settled() {
                    return is_settled;
                }

                public void setIs_settled(String is_settled) {
                    this.is_settled = is_settled;
                }

                public String getSettled_type() {
                    return settled_type;
                }

                public void setSettled_type(String settled_type) {
                    this.settled_type = settled_type;
                }

                public String getSummary() {
                    return summary;
                }

                public void setSummary(String summary) {
                    this.summary = summary;
                }

                public String getFans_total() {
                    return fans_total;
                }

                public void setFans_total(String fans_total) {
                    this.fans_total = fans_total;
                }

                public String getWeb_url() {
                    return web_url;
                }

                public void setWeb_url(String web_url) {
                    this.web_url = web_url;
                }
            }

            public static class AskerListBean {
                /**
                 * user_id : 0
                 * user_name : 高高
                 * web_url : http://image.wufazhuce.com/placeholder-author-avatar.png
                 * summary :
                 * desc :
                 * is_settled :
                 * settled_type :
                 * fans_total :
                 * wb_name :
                 */

                private String user_id;
                private String user_name;
                private String web_url;
                private String summary;
                private String desc;
                private String is_settled;
                private String settled_type;
                private String fans_total;
                private String wb_name;

                public String getUser_id() {
                    return user_id;
                }

                public void setUser_id(String user_id) {
                    this.user_id = user_id;
                }

                public String getUser_name() {
                    return user_name;
                }

                public void setUser_name(String user_name) {
                    this.user_name = user_name;
                }

                public String getWeb_url() {
                    return web_url;
                }

                public void setWeb_url(String web_url) {
                    this.web_url = web_url;
                }

                public String getSummary() {
                    return summary;
                }

                public void setSummary(String summary) {
                    this.summary = summary;
                }

                public String getDesc() {
                    return desc;
                }

                public void setDesc(String desc) {
                    this.desc = desc;
                }

                public String getIs_settled() {
                    return is_settled;
                }

                public void setIs_settled(String is_settled) {
                    this.is_settled = is_settled;
                }

                public String getSettled_type() {
                    return settled_type;
                }

                public void setSettled_type(String settled_type) {
                    this.settled_type = settled_type;
                }

                public String getFans_total() {
                    return fans_total;
                }

                public void setFans_total(String fans_total) {
                    this.fans_total = fans_total;
                }

                public String getWb_name() {
                    return wb_name;
                }

                public void setWb_name(String wb_name) {
                    this.wb_name = wb_name;
                }
            }
        }
    }
}
——————————————————————————————————————————————————
JsonDao
——————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

/**
 * @author Dash
 * @date 2017/10/20
 * @description:
 */
public class JsonDao {

    private MyHelper myHelper;

    public JsonDao(Context context) {

        myHelper = new MyHelper(context);
    }

    /**
     * 插入数据的操作
     */
    public void insertJson(String json,String url){

        SQLiteDatabase database = myHelper.getWritableDatabase();
        //现根据url删除json
        database.delete("jsoncache","url = ?",new String[]{url});

        //再去添加
        ContentValues values = new ContentValues();
        values.put("json",json);
        values.put("url",url);

        database.insert("jsoncache",null,values);

        //关闭
        database.close();
    }


    /**
     * 查询数据库的操作....根据传入url获取存的json字符串
     */
    public String getJson(String url){

        SQLiteDatabase writableDatabase = myHelper.getWritableDatabase();

        Cursor cursor = writableDatabase.query("jsoncache", new String[]{"json"}, "url = ?", new String[]{url}, null, null, null);

        if (cursor.moveToNext()){
            String json = cursor.getString(cursor.getColumnIndex("json"));

            return json;
        }

        return null;
    }

}
——————————————————————————————————————————————————
MyHelper
——————————————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.dao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * @author Dash
 * @date 2017/10/20
 * @description:
 */
public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context) {
        super(context, "bawei.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        //创建表
        sqLiteDatabase.execSQL("create table jsoncache(id integer primary key autoincrement,json text not null,url text not null)");

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}
————————————————————————————————————————————————
JsonCallBack
——————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.inter;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public interface JsonCallBack {

    public void getJsonString(String json);
}
————————————————————————————————————————————————
ImageLoaderUtil
————————————————————————————————————————————————-
package news1510a.bawei.com.a16_pulltorefresh_demo.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.utils.StorageUtils;

import java.io.File;

import news1510a.bawei.com.a16_pulltorefresh_demo.R;


/**
 * @author Dash
 * @date 2017/10/10
 * @description:
 */
public class ImageLoaderUtil {

    /**
     * 对imageLoader进行配置的方法
     * @param context 上下文
     */
    public static void init(Context context) {

        File cacheDir = StorageUtils.getCacheDirectory(context);  //指定默认的硬盘(sd卡)的缓存文件夹路径

        /**
         * 可以自己创建一个sd下面的文件夹作为硬盘缓存的路径
         */
        File file = new File(Environment.getExternalStorageDirectory(),"image");
        if (! file.exists()){
            file.mkdirs();
        }

        //1.创建一个ImageLoaderConfiguration,,,图片加载器的配置对象
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)

                .threadPoolSize(3) // default  线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
                .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                .denyCacheImageMultipleSizesInMemory()

                //1 TB = 1024GB 1G=1024MB 1M = 1024KB 1KB = 1024BYTE
                //LruMemoryCache,,lru最近最少使用算法...内部维护的是LinkedHashMap,,当一张图片最近很少使用的时候会从mao集合里面移除
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //指定内存缓存的大小,,2M,,可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
                .memoryCacheSizePercentage(13) // default

                //指定硬盘/磁盘缓存的路径
                .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径
                .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
                .diskCacheFileCount(100)  // 可以缓存的文件数量


                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs() // 打印debug log
                .build(); //开始构建

        //2.对上面配置对象的初始化
        ImageLoader.getInstance().init(config);

    }

    /**
     * 默认的展示图片的选项
     *
     * @return
     */
    public static DisplayImageOptions getDefaultOption() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片

                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位

                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中

                .considerExifParams(true) // default


                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型

                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)

                .build();

        return options;
    }

    /**
     * 展示圆角的选项
     * @return
     */
    public static DisplayImageOptions getRoundOption() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片

                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位

                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中

                .considerExifParams(true) // default


                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型

                .displayer(new RoundedBitmapDisplayer(20)) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)

                .build();

        return options;
    }

    /**
     * 展示圆形的选项
     * @return
     */
    public static DisplayImageOptions getCircleOption() {
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片

                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位

                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中

                .considerExifParams(true) // default


                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型

                .displayer(new CircleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)

                .build();

        return options;
    }
}
——————————————————————————————————————————
NetDataUtil
——————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.util;

import android.content.Context;
import android.os.AsyncTask;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import news1510a.bawei.com.a16_pulltorefresh_demo.inter.JsonCallBack;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public class NetDataUtil {

    /**
     * 获取网络数据的方法
     * @param path
     */
    public static void getData(final String path, Context context, final JsonCallBack callBack){

        if (NetWorkUtil.isConn(context)){

            AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
                @Override
                protected String doInBackground(Void... voids) {

                    try {
                        URL url = new URL(path);

                        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setReadTimeout(5000);
                        connection.setConnectTimeout(5000);

                        int responseCode = connection.getResponseCode();
                        if (responseCode == 200){
                            InputStream inputStream = connection.getInputStream();

                            String json = StringUtil.streamToString(inputStream,"utf-8");

                            return json;
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    return null;
                }

                @Override
                protected void onPostExecute(String s) {
                    //通过接口把json格式的字符串传递回去....
                    callBack.getJsonString(s);
                }
            };

            asyncTask.execute();

        }else {
            NetWorkUtil.showNoNetWorkDlg(context);
        }

    }
}
——————————————————————————————————————————————
NetWorkUtil
————————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.util;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

import news1510a.bawei.com.a16_pulltorefresh_demo.R;


/**
 * @author Dash
 * @date 2017/9/27
 * @description:
 *
 * 如果要使用网络状态的判断,需要权限....<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 */
public class NetWorkUtil {

    /**
     * 这个方法是判断网络状态是否可用的
     * @param context
     * @return
     */
    public static boolean isConn(Context context){
        boolean bisConnFlag=false;
        //1.获取网络连接的管理对象
        ConnectivityManager conManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        //2.通过管理者对象拿到网络的信息
        NetworkInfo network = conManager.getActiveNetworkInfo();
        if(network!=null){
            //3.网络状态是否可用的返回值
            bisConnFlag=network.isAvailable();
        }
        return bisConnFlag;
    }

    /**
     * 如果没有网络 弹出dialog对话框,,,是否进入设置网络的页面
     * @param context
     */
    public static void showNoNetWorkDlg(final Context context) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setIcon(R.mipmap.ic_launcher)         //
                .setTitle("警告")            //
                .setMessage("当前无网络,是否去设置?").setPositiveButton("设置", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 跳转到系统的网络设置界面
                Intent intent = null;
                // 先判断当前系统版本
                if(android.os.Build.VERSION.SDK_INT > 10){  // 3.0以上
                    intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
                }else{
                    intent = new Intent();
                    intent.setClassName("com.android.settings", "com.android.settings.WirelessSettings");
                }
                context.startActivity(intent);

            }
        }).setNegativeButton("取消", null).show();
    }
}
————————————————————————————————————————————
StringUtil
——————————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.util;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * @author Dash
 * @date 2017/10/16
 * @description:
 */
public class StringUtil {

    /**
     * 把一个字节流转成字符串
     *
     * @param inputStream
     * @param charset
     * @return
     */
    public static String streamToString(InputStream inputStream, String charset) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String s = null;
            StringBuilder builder = new StringBuilder();
            while ((s = bufferedReader.readLine()) != null){
                builder.append(s);
            }

            bufferedReader.close();
            return builder.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return  null;
    }

}
————————————————————————————————————————————
MyListView
——————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;

/**
 * @author Dash
 * @date 2017/10/19
 * @description:
 *
 * 参考博客地址:http://blog.csdn.net/zhaokaiqiang1992/article/details/38585547
 */
public class MyListView extends ListView {
    public MyListView(Context context) {
        super(context);
    }

    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 重新计算高度
     * @param widthMeasureSpec
     * @param heightMeasureSpec
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

   /* @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }*/
}
————————————————————————————————————————
item_gridviewlayout.xml
——————————————————————————————————————————-
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/grid_image"
        android:src="@mipmap/ic_launcher"
        android:layout_width="100dp"
        android:layout_height="100dp" />

    <TextView
        android:id="@+id/grid_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
——————————————————————————————————————
item_image_layout.xml
————————————————————————————————————————
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:padding="10dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_title"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="100dp"
        android:layout_height="100dp" />

</LinearLayout>
——————————————————————————————————
item_text_layout.xml
————————————————————————————————————————————
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:padding="10dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>
————————————————————————————————————————
权限
————————————————————————————————————
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值