pulltorefresh上拉加载,下拉刷新,imageloder图片显示 ,判断网络状态,数据库保存,

MainActivity

package bwie.com.moniyuekao1;

import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

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

import java.util.ArrayList;
import java.util.HashSet;
import java.util.zip.Inflater;

import bwie.com.moniyuekao1.adapter.MyAdapter;
import bwie.com.moniyuekao1.bean.Shop;
import bwie.com.moniyuekao1.helper.Dao;
import bwie.com.moniyuekao1.helper.User;
import bwie.com.moniyuekao1.httputils.HttpUtils;
import bwie.com.moniyuekao1.httputils.NetUtils;

public class MainActivity extends AppCompatActivity implements HttpUtils.NetCallBack {
    //展示列表的url
    private String url = "http://ttpc.dftoutiao.com/jsonpc/refresh?type=";
    private int type=5010;
    //轮播图片的url
    private String bannerUrl = "http://www.xieast.com/api/banner.php";
    private PullToRefreshListView pulltf;
    private ArrayList<Shop.DataBean> list;
    private MyAdapter adapter;
    private Dao dao;
    private HttpUtils httpUtils;
    private ViewPager view_pager;
    private ArrayList<ImageView> bannerimages;
    private BannerCallBack bannerCallBack;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        pulltf = findViewById(R.id.pulltf);
        //设置pulltf
        pulltf.setMode(PullToRefreshBase.Mode.BOTH);
        pulltf.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                //刷新
                type=5010;
                loadData();
                //停止刷新  如果刷新数据 可能太快 停止不了刷新  所以延迟1秒
                pulltf.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Log.i("aaa","执行了下拉刷新");
                        pulltf.onRefreshComplete();
                    }
                },2000);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                //加载
                type++;
                loadData();
                //停止刷新  如果刷新数据 可能太快 停止不了刷新  所以延迟1秒
                pulltf.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Log.i("aaa","执行了上拉加载");
                        pulltf.onRefreshComplete();
                    }
                },2000);
            }
        });
        //创建装pull信息的集合
        list = new ArrayList<>();
        //创建适配器pull
        adapter = new MyAdapter(MainActivity.this, list);
        //设置pull适配器
        pulltf.setAdapter(adapter);
        //调用dao层
        dao = new Dao(MainActivity.this);
        //调用接口
        httpUtils = HttpUtils.getInstance();
        loadData();
        //轮播1
        lunBo();

    }
    /*轮播1*/
    private void lunBo() {
        /*给pulltf设置头布局*/
        ListView refreshableView = pulltf.getRefreshableView();
        View bannerView = LayoutInflater.from(this).inflate(R.layout.banner_layout, null, false);
        /*t通过bannerView查找控件*/
        view_pager = bannerView.findViewById(R.id.view_pager);
        //创建集合装图片
        bannerimages = new ArrayList<>();

        //这只头布局的布局参数
        /*设置他的宽高*/
        AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 600);
        //添加导bannerview中
        bannerView.setLayoutParams(params);
        //添加头布局
        /*把bannerView添加导refreshbleView中*/
        refreshableView.addHeaderView(bannerView);
        //创建方法BannerCallBack
        bannerCallBack = new BannerCallBack();
        //继续回调
        httpUtils.getLoadFromJson(bannerUrl,bannerCallBack);
    }

    private void loadData() {
        //查询数据库
        User user = dao.query((url + type));
        if (user!=null) {
            parserJson(user.json);
        }else {
            if (NetUtils.isNetworkConnectted(this)){
                /*有网  ,,请求网络*/
                httpUtils.getLoadFromJson((url+type),this);
            }else {
                Toast.makeText(MainActivity.this, "没有网络", Toast.LENGTH_SHORT).show();
            }
        }
    }

    /*通过Gson解析*/
    private void parserJson(String json) {
        Gson gson = new Gson();
        Shop shop = gson.fromJson(json, Shop.class);
        //判断页数
        if (type==5010){
            list.clear();
        }
        list.addAll(shop.getData());
        //通过Hashset去除重复
        HashSet hashSet = new HashSet(list);
        list.clear();
        list.addAll(hashSet);
        //刷新适配器
        adapter.notifyDataSetChanged();


    }


    /*成功执行的回调函数*/
    @Override
    public void onSuccess(String result) {
        Log.i("aaa",result);
        //街区json串
        String json = result.replace("null(", "").replace(")", "");
        //创建Gson
        Gson gson = new Gson();
        Shop shop = gson.fromJson(json, Shop.class);
        list.addAll(shop.getData());
        adapter.notifyDataSetChanged();
    }
    /*失败执行的回调函数*/
    @Override
    public void onError(String errorMsg) {
        Log.i("aaa",errorMsg);
    }
    /*轮播中的回调   需要实现httputils的netcallback方法*/
     class BannerCallBack implements HttpUtils.NetCallBack{
         @Override
         public void onSuccess(String result) {
             Log.i("aaa", "轮播:" + result);

         }

         @Override
         public void onError(String errorMsg) {

         }
     }
}

MyAdapter

package bwie.com.moniyuekao1.adapter;

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

import com.bwei.imageloaderlibrary.utils.ImageLoaderUtils;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

import bwie.com.moniyuekao1.R;
import bwie.com.moniyuekao1.bean.Shop;

public class MyAdapter extends BaseAdapter {
    private Context context;
    private List<Shop.DataBean> list;

    public MyAdapter(Context context, List<Shop.DataBean> 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 viewHolder = null;
        if (view == null) {
            viewHolder = new ViewHolder();
            view = LayoutInflater.from(context).inflate(R.layout.item_adapter1, null, false);
            viewHolder.ivIcon = view.findViewById(R.id.iv_icon);
            viewHolder.tvDesc = view.findViewById(R.id.tv_desc);
            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.tvDesc.setText(list.get(i).getBrief());
        ImageLoader.getInstance().displayImage(list.get(i).getMiniimg().get(0).getSrc(),viewHolder.ivIcon);
    /*    ImageLoader  .getInstance().displayImage(dataBeans.get(position).getMiniimg().get(0).getSrc(), viewHolder.ivIcon);
        viewHolder.tvDesc.setText(dataBeans.get(position).getBrief());*/
        return view;
    }
    class  ViewHolder{
        ImageView ivIcon;
        TextView tvDesc;
    }
}

//网络获取 接口回调

package bwie.com.moniyuekao1.httputils;

import android.os.AsyncTask;
import android.text.TextUtils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import bwie.com.moniyuekao1.MainActivity;

public class HttpUtils {
    private static final HttpUtils ourInstance = new HttpUtils();

    public static HttpUtils getInstance() {
        return ourInstance;
    }

    private HttpUtils() {
    }
    public void getLoadFromJson(String url,NetCallBack callBack){
        new Async(callBack).execute(url);
    }

    private class Async extends AsyncTask<String,Void,String> {
        private NetCallBack netCallBack;
        private Async(){

        }
        private Async(NetCallBack netCallBack){
            this.netCallBack=netCallBack;
        }
        @Override
        protected String doInBackground(String... strings) {
            HttpURLConnection connection=null;
            try {
                URL url=new URL(strings[0]);
                connection = (HttpURLConnection) url.openConnection();
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(5000);
                if (connection.getResponseCode()==HttpURLConnection.HTTP_OK) {
                    InputStream inputStream = connection.getInputStream();
                    return inputStream2String(inputStream);
                }
            } catch (Exception e) {
                netCallBack.onError(e.getMessage());
            }finally {
                if (connection!=null){
                    connection.disconnect();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if (TextUtils.isEmpty(s)){
                netCallBack.onError("没有请求数据");
            }else {
                netCallBack.onSuccess(s);
            }
        }
    }

    private String inputStream2String(InputStream inputStream) throws IOException {
        ByteArrayOutputStream bos =new ByteArrayOutputStream();
        byte[] buffer=new byte[1024];
        int len=-1;
        while ((len=inputStream.read(buffer))!=-1){
            bos.write(buffer,0,len);
        }
        return new String(bos.toByteArray());
    }

    public interface NetCallBack{
        void onSuccess(String result);
        void onError(String errorMsg);
    }
}

网络判断接口

package bwie.com.yuekao1.httputils;


import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetUtils {
    public static boolean isNetworkConnected(Context context) {
        if (context != null) {
            ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
            if (mNetworkInfo != null) {
                return mNetworkInfo.isAvailable();
            }
        }
        return false;
    }
}

权限

  <!--网络-->
    <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"/>

猜你喜欢

转载自blog.csdn.net/nideyida1/article/details/81255348