一、主页面

package com.example.pulltorefresh;import android.os.AsyncTask;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;import com.example.pulltorefresh.Adapter.NewsAdapter;
import com.example.pulltorefresh.HttpUtils.Httputils;
import com.example.pulltorefresh.HttpUtils.Networkutils;
import com.example.pulltorefresh.bean.News;
import com.example.pulltorefresh.db.NewsDao;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;import java.io.IOException;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private int page = 1;private static final String TAG = "MainActivity";private PullToRefreshListView plvData;private List<News.DataBean> list;private NewsAdapter newsAdapter;private Handler handler = new Handler();private boolean isLoadMore = false;private NewsDao dao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);plvData = findViewById(R.id.plv_data);list = new ArrayList<>();dao = new NewsDao(this);plvData.setMode(PullToRefreshBase.Mode.BOTH);plvData.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {@Overridepublic void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {isLoadMore = false;page = 1;getData(page);handler.postDelayed(new Runnable() {@Overridepublic void run() {plvData.onRefreshComplete();}},2000);}@Overridepublic void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {isLoadMore =true;page++;getData(page);handler.postDelayed(new Runnable() {@Overridepublic void run() {plvData.onRefreshComplete();}},2000);}});newsAdapter = new NewsAdapter(this,list);plvData.setAdapter(newsAdapter);getDataFromDB();getData(page);}private void getDataFromDB(){List<News.DataBean> dataBeans = dao.queryAll();list.clear();list.addAll(dataBeans);newsAdapter.notifyDataSetChanged();}private void getData(int page) {if (!Networkutils.isNetworkAvailable(this)){return ;}new AsyncTask<String, Integer, String>() {@Overrideprotected String doInBackground(String... strings) {String result = null;try {result = Httputils.getStringFrom(strings[0]);} catch (IOException e) {e.printStackTrace();}return result;}@Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);Gson gson = new Gson();News news = gson.fromJson(s, News.class);Log.i(TAG, "onPostExecute:大牙111111111111111111111111"+news);if (news!=null){List<News.DataBean> data = news.getData();if (data!=null){int i = dao.insert(data);if (i>0){Log.i(TAG, "插入" + i + "条数据");}else{Log.i(TAG, "没有插入数据: ");}if (!isLoadMore){list.clear();;}list.addAll(data);newsAdapter.notifyDataSetChanged();}}}}.execute("http://www.xieast.com/api/news/news.php?page="+ page);}
}

二、DAO层

package com.example.pulltorefresh.db;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.text.TextUtils;import com.example.pulltorefresh.bean.News;import java.util.ArrayList;
import java.util.List;/*** Created by 红鼻子小黑 on 2018/9/13.*/public class NewsDao {public static final String TABLE_NAME = "news";public static final String COLUMN_ID = "id";public static final String COLUMN_TITLE = "title";public static final String COLUMN_DATE = "date";public static final String COLUMN_CATEGORY = "category";public static final String COLUMN_AUTHOR_NAME = "author_name";public static final String COLUMN_UTL = "url";public static final String COLUMN_THUMBNAIL01 = "thumbnail_01";public static final String COLUMN_THUMBNAIL02 = "thumbnail_02";public static final String COLUMN_THUMBNAIL03 = "thumbnail_03";private final SQLiteDatabase db;public NewsDao(Context context) {DBHelper helper = new DBHelper(context);db = helper.getWritableDatabase();}public int insert(List<News.DataBean> news) {int length = 0;ContentValues values = new ContentValues();for (News.DataBean dataBean : news) {if (!hasId(dataBean.getUniquekey())){values.put(COLUMN_ID,dataBean.getUniquekey());values.put(COLUMN_TITLE,dataBean.getTitle());values.put(COLUMN_DATE,dataBean.getDate());values.put(COLUMN_CATEGORY,dataBean.getCategory());values.put(COLUMN_AUTHOR_NAME,dataBean.getAuthor_name());values.put(COLUMN_UTL,dataBean.getUrl());values.put(COLUMN_THUMBNAIL01,TextUtils.isEmpty(dataBean.getThumbnail_pic_s())?"":dataBean.getThumbnail_pic_s());values.put(COLUMN_THUMBNAIL02,TextUtils.isEmpty(dataBean.getThumbnail_pic_s02())?"":dataBean.getThumbnail_pic_s02());values.put(COLUMN_THUMBNAIL03,TextUtils.isEmpty(dataBean.getThumbnail_pic_s03())?"":dataBean.getThumbnail_pic_s03());long l = db.insert(TABLE_NAME, null, values);if (l>0){length++;}}}return length;}public boolean hasId(String id) {Cursor cursor = db.query(TABLE_NAME, null, COLUMN_ID + "=?", new String[]{id}, null, null, null);if (cursor.moveToNext()) {return true;}return false;}public List<News.DataBean> queryAll(){List<News.DataBean> news = new ArrayList<>();Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);while(cursor.moveToNext()){News.DataBean dataBean = new News.DataBean();dataBean.setUniquekey(cursor.getString(cursor.getColumnIndex(COLUMN_ID)));dataBean.setTitle(cursor.getString(cursor.getColumnIndex(COLUMN_TITLE)));dataBean.setDate(cursor.getString(cursor.getColumnIndex(COLUMN_DATE)));dataBean.setCategory(cursor.getString(cursor.getColumnIndex(COLUMN_CATEGORY)));dataBean.setAuthor_name(cursor.getString(cursor.getColumnIndex(COLUMN_AUTHOR_NAME)));dataBean.setUrl(cursor.getString(cursor.getColumnIndex(COLUMN_UTL)));String Thumbnail01 = cursor.getString(cursor.getColumnIndex(COLUMN_THUMBNAIL01));String Thumbnail02 = cursor.getString(cursor.getColumnIndex(COLUMN_THUMBNAIL02));String Thumbnail03 = cursor.getString(cursor.getColumnIndex(COLUMN_THUMBNAIL03));dataBean.setThumbnail_pic_s(TextUtils.isEmpty(Thumbnail01) ? "" : Thumbnail01);dataBean.setThumbnail_pic_s02(TextUtils.isEmpty(Thumbnail02) ? "" : Thumbnail02);dataBean.setThumbnail_pic_s03(TextUtils.isEmpty(Thumbnail03) ? "" : Thumbnail03);news.add(dataBean);}return news;}
}

三、创建表Helper类

package com.example.pulltorefresh.db;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;/*** Created by 红鼻子小黑 on 2018/9/13.*/public class DBHelper extends SQLiteOpenHelper {private static final String DB_NAME = "news.db";private static final int DB_VERSION = 1;public DBHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {String sql = "create table " + NewsDao.TABLE_NAME + "(" +NewsDao.COLUMN_ID + " text primary key," +NewsDao.COLUMN_TITLE + " text," +NewsDao.COLUMN_DATE + " text," +NewsDao.COLUMN_CATEGORY + " text," +NewsDao.COLUMN_AUTHOR_NAME + " text," +NewsDao.COLUMN_UTL + " text," +NewsDao.COLUMN_THUMBNAIL01 + " text," +NewsDao.COLUMN_THUMBNAIL02 + " text," +NewsDao.COLUMN_THUMBNAIL03 + " text)";db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {}
}

四、Adapter

package com.example.pulltorefresh.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.example.pulltorefresh.R;
import com.example.pulltorefresh.bean.News;
import com.nostra13.universalimageloader.core.ImageLoader;import java.util.List;/*** Created by 红鼻子小黑 on 2018/9/13.*/public class NewsAdapter extends BaseAdapter{private Context context;private List<News.DataBean> list;public NewsAdapter(Context context, List<News.DataBean> list) {this.context = context;this.list = list;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int i) {return list.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {ViewHolder holder = null;if (view ==null){holder = new ViewHolder();view = View.inflate(context, R.layout.item_news,null);holder.imgLogo = view.findViewById(R.id.img_logo);holder.txtTitle = view.findViewById(R.id.txt_title);holder.txtTime = view.findViewById(R.id.txt_time);view.setTag(holder);}else{holder =(ViewHolder) view.getTag();}ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s(),holder.imgLogo);holder.txtTitle.setText(list.get(i).getTitle());holder.txtTime.setText(list.get(i).getDate());return view;}class ViewHolder{ImageView imgLogo;TextView txtTitle;TextView txtTime;}
}

五、图片加载缓存

package com.example.pulltorefresh;import android.app.Application;
import android.graphics.Bitmap;
import android.os.Environment;import com.nostra13.universalimageloader.cache.disc.DiskCache;
import com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
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.display.BitmapDisplayer;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;import java.io.File;
import java.io.IOException;/*** Created by 红鼻子小黑 on 2018/9/13.*/public class BaseApption extends Application{@Overridepublic void onCreate() {super.onCreate();File cacheDir = null;if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){File rootSD = Environment.getExternalStorageDirectory();cacheDir = new File(rootSD,"imgs");if (!cacheDir.exists()){cacheDir.mkdirs();}DiskCache diskCache = null;try {diskCache = new LruDiskCache(cacheDir,new  Md5FileNameGenerator(),50*1024*1024);} catch (IOException e) {e.printStackTrace();}BitmapDisplayer displayer = new CircleBitmapDisplayer();DisplayImageOptions options = new DisplayImageOptions.Builder().bitmapConfig(Bitmap.Config.RGB_565).cacheOnDisk(true).cacheInMemory(true).displayer(displayer).build();ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).diskCache(diskCache).memoryCache(new LruMemoryCache(12*1024*1024)).defaultDisplayImageOptions(options).build();ImageLoader.getInstance().init(configuration);}}
}

五、判断有网没网

package com.example.pulltorefresh.HttpUtils;import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;/*** Created by 红鼻子小黑 on 2018/9/13.*/public class Networkutils {public static boolean isNetworkAvailable(Context context){boolean available = false;ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = manager.getActiveNetworkInfo();if (networkInfo!=null){available = networkInfo.isAvailable();}return available;}
}

pulltorefresh刷新相关推荐

  1. Android Studio3.2经常用的一些依赖(以后再加)

    Butterknife绑定控件 implementation 'com.jakewharton:butterknife:8.8.1'annotationProcessor 'com.jakewhart ...

  2. 安卓开发入门学习笔记

    第一天 1.LinearLayout,线性布局  vertically :垂直,纵向  horizontally:水平,横向 a:方向,默认横向 android:orientation="h ...

  3. android 点击返回顶部,Android scrollToTop实现点击回到顶部(兼容PullTorefreshScrollview)...

    前言 最近因为项目组需求,特研究了一下"回到顶部"效果,即:页面里有scrollview,内容很多,当滑动到页面下面或者更深时,需要回到顶部,即可点击出现的按钮,省得回滑N久.我没 ...

  4. Android PullToRefresh (ListView GridView 下拉刷新) 使用详解

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38238749,本文出自:[张鸿洋的博客] 群里一哥们今天聊天偶然提到这个git ...

  5. Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向...

    很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...

  6. Android PullToRefresh(下拉刷新)的使用详解

    开源项地址:https://github.com/chrisbanes/Android-PullToRefresh 在Android-PullToRefresh-master文件夹下,我们会看到还有三 ...

  7. 为RecyclerView添加下拉刷新(PullToRefresh)功能

    在之前的文章中,我们实现了带有header和footer功能的WrapRecyclerView. 实现带header和footer功能的RecyclerView 实现带header和footer功能的 ...

  8. pullToRefresh下拉刷新上拉加载

    PullToRefresh 是一个第三方的工程. 之前的自定义下拉刷新控件貌似不太好用,于是网上找了这个. 参考:http://www.cnblogs.com/summers/p/4343964.ht ...

  9. ListView上拉加载,下拉刷新 PullToRefresh的使用

    PullToRefresh是一套实现非常好的下拉刷新库,它支持: ListView ExpandableListView GridView WebView ScrollView HorizontalS ...

最新文章

  1. 目标检测实战:4种YOLO目标检测的C++和Python两种版本实现
  2. 检测数据类型的几种方式
  3. Contains Duplicate --包含相同值
  4. MySQL学习笔记7:基本查询
  5. [ZZ]强签名的由来和作用
  6. Linux带给了我什么?
  7. SAP Business Application Studio 如何同 SAP BTP CloudFoundry 环境绑定
  8. js 验证护照_护照本地策略第2部分| Node.js
  9. Python GUI界面编程初步 05- GUI框架PyQt的运用 - 02 PyQt的信号和槽例子
  10. oracle中常用的连接,Oracle 数据库中表的常用连接方式
  11. php控制器,php模型和控制器之间交互
  12. 身份证号第18位的计算
  13. JAVA冰箱评测开题报告,家用冰箱毕业论文 开题报告
  14. Codeforces Round #362 (Div. 2) D 树形dp
  15. 基于SMTP协议的E-MAIL电子邮件发送客户端软件C#实现
  16. 拉网小调(民歌介绍)
  17. 【机器学习】五种超参数优化技巧
  18. 细说华为和荣耀的关系:潮流的荣耀和稳重的华为
  19. 完美的Python代码制作“恐龙跳一跳“小游戏【附带源码 】
  20. 已拿头条offer的研发工程师面经(C++)

热门文章

  1. java字间距突然变大
  2. inotifywait实现文件监控
  3. Linux驱动开发(源码精析)
  4. [python][爬虫]暴漫gif下载
  5. zemax光学设计如何优化
  6. 重装系统——win10
  7. ubuntu 16.04 部署dzzoffice+onlyoffice
  8. 【Java基础】--05.java基本类型与包装类型
  9. 易语言做mysql登录器_易语言制作数据库登录器 易语言数据库教程
  10. 计算机视觉领域顶级会议和顶级期刊汇总