数据展示(网络判断+数据库+无限轮播)

package com.example.ggq.gaoguoqing20180728.fragment.channel;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.example.ggq.gaoguoqing20180728.R;
import com.example.ggq.gaoguoqing20180728.adapter.BannerAdapter;
import com.example.ggq.gaoguoqing20180728.adapter.MyBaseAdapter;
import com.example.ggq.gaoguoqing20180728.base.BaseFragmnet;
import com.example.ggq.gaoguoqing20180728.bean.BannerBean;
import com.example.ggq.gaoguoqing20180728.bean.Data;
import com.example.ggq.gaoguoqing20180728.database.Dao;
import com.example.ggq.gaoguoqing20180728.database.DataBean;
import com.example.ggq.gaoguoqing20180728.utils.Httputils;
import com.example.ggq.gaoguoqing20180728.utils.NetUtils;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

/**
 * A simple {@link Fragment} subclass.
 */
public class ChannelOneFragment extends BaseFragmnet {


    private PullToRefreshListView list_view;
    private Httputils httputils;
    private String url = "http://ttpc.dftoutiao.com/jsonpc/refresh?type=";
    private int page = 5010;
    private DataCallback callback = new DataCallback();
    private static final String TAG = "ChannelOneFragment";
    private MyBaseAdapter adapter;
    private List<Data.DataBean> list;
    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what == 0){
                int currentItem = view_pager.getCurrentItem();
                currentItem++;
                view_pager.setCurrentItem(currentItem);
                changePointState(currentItem%points.size());
                sendEmptyMessageDelayed(0,1000);
            }
        }
    };
    private Dao dao;
    private ViewPager view_pager;
    private LinearLayout ll_point;
    private List<ImageView> bannerImages;
    private List<ImageView> points;
    private BannerCallback bannerCallback = new BannerCallback();
    private String bannerApi = "http://www.xieast.com/api/banner.php";

    @Override
    protected void initData() {
        httputils = Httputils.getInstance();
        httputils.get(url+page,callback);
        list_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                page = 5010;
                httputils.get(url+page,callback);
                list_view.onRefreshComplete();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                page++;
                httputils.get(url+page,callback);
                list_view.onRefreshComplete();
            }
        });
        /**
        *
        *@作者 ggq
        *
         * 轮播
        *@创建日期 2018/7/29 15:10
        */
        ListView refreshableView = list_view.getRefreshableView();
        View view = LayoutInflater.from(getContext()).inflate(R.layout.banner_layout, null);
        view_pager = view.findViewById(R.id.banner_view_pager);
        ll_point = view.findViewById(R.id.ll_point);
        bannerImages = new ArrayList<>();
        points = new ArrayList<>();
        //设置头布局的布局参数
        AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 300);
        view.setLayoutParams(params);
        //添加头布局
        refreshableView.addHeaderView(view);
        //请求轮播
        httputils.get(bannerApi,bannerCallback);
        //给适配器一个空数据
        list = new ArrayList<>();
        adapter = new MyBaseAdapter(getActivity(),list);
        list_view.setAdapter(adapter);
        //查询数据库
        dao = new Dao(getActivity());
        DataBean bean = dao.loadData(url + page);
        Log.d(TAG, "initData: "+bean);

        if(bean != null){
            showData(bean.json);
        }else {
            //判断网络
            if(NetUtils.isNetConnect(getActivity())){
                httputils.get(url+page,callback);
            }else {
                Toast.makeText(getActivity(), "没有网络了,请连接网络", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void showData(String json) {
        Gson gson = new Gson();
        Data data = gson.fromJson(json, Data.class);
        if(page == 5010){
            list.clear();
        }
        list.addAll(data.getData());
        //使用HashSet去除重复
        HashSet hashSet = new HashSet(list);

        list.clear();
        list.addAll(hashSet);
        adapter.notifyDataSetChanged();
        list_view.postDelayed(new Runnable() {
            @Override
            public void run() {
                list_view.onRefreshComplete();
            }
        },1000);
    }

    @Override
    protected void initView(View view) {
        list_view = view.findViewById(R.id.pull_to_refresh_list_view);
        list_view.setMode(PullToRefreshBase.Mode.BOTH);
    }

    @Override
    protected int getLayoutId() {
        return R.layout.fragment_channel_one;
    }
    public class DataCallback implements Httputils.NetCallback{

        @Override
        public void onSuccess(String s) {
            String replace = s.replace("null(", "").replace(")", "");
            Log.d(TAG, "onSuccess: "+replace);
            dao.insert(new DataBean(url+page,replace));
            showData(replace);
        }

        @Override
        public void onError(String msg) {
            Log.d(TAG, "onError: "+msg);
        }
    }
    class BannerCallback implements Httputils.NetCallback{

        @Override
        public void onSuccess(String s) {
            Gson gson = new Gson();
            BannerBean bannerBean = gson.fromJson(s, BannerBean.class);
            for (int i = 0; i < bannerBean.getData().size(); i++) {
                ImageView imageView = new ImageView(getActivity());
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                ImageLoader.getInstance().displayImage(bannerBean.getData().get(i).getImg(),imageView);
                bannerImages.add(imageView);
                //添加小圆点
                ImageView point = new ImageView(getActivity());
                point.setImageResource(R.drawable.shape_gray);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30, 30);
                params.leftMargin = 10;
                ll_point.addView(point,params);
                points.add(point);
            }
            view_pager.setAdapter(new BannerAdapter(bannerImages));
            //改变小圆点状态
            changePointState(0);
            handler.sendEmptyMessageDelayed(0,1000);
        }

        @Override
        public void onError(String msg) {

        }
    }

    private void changePointState(int i) {
        for (int j = 0; j < points.size(); j++) {
            if(i == j){
                points.get(j).setImageResource(R.drawable.shape_red);
            }else {
                points.get(j).setImageResource(R.drawable.shape_gray);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42470335/article/details/81271325