//前往别忘记加载PullToRefreshListView文件夹
//--------------------------------------------------------------------------------------------------
网络连接状态管理器
package com.xx.cache.utils;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetWorkUtils {
public static boolean isNetworkConnected(Context context) {
//获取网络连接状态管理器
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//得到网络信息
NetworkInfo info = cm.getActiveNetworkInfo();
if (info != null) {
return info.isAvailable();
}
return false;
}
}
缓存图片
public class MyApplication extends Application {
//声明
//private static MyApplication instance= new MyApplication();
private static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
//赋值 创建
instance = this;
//sd路径
File file = StorageUtils.getCacheDirectory(this);
//全局配置
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.diskCache(new UnlimitedDiskCache(file))
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.build();
ImageLoader.getInstance().init(configuration);
}
//饿汉
public static MyApplication getInstance() {
return instance;
}
}
或是这个
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
File file = new File(Environment.getExternalStorageDirectory(), “/ima”);
if (file.exists()) {
file.mkdir();
}
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.diskCache(new UnlimitedDiskCache(file))
.diskCacheSize(50 * 1024 * 1024)
.diskCacheFileCount(50)
.build();
ImageLoader.getInstance().init(configuration);
}
}
//布局文件
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android”
xmlns:app=“http://schemas.android.com/apk/res-auto”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=".activity.MainActivity">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/prl"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</android.support.constraint.ConstraintLayout>
主要内容
public class MainActivity extends AppCompatActivity {
private int page = 1;
private PullToRefreshListView prl;
private Handler handler = new Handler();
private List<NewsInfo.DataBean> datas = null;
private DBDao dbDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
prl = findViewById(R.id.prl);
//网络判断
final boolean networkConnected = NetWorkUtils.isNetworkConnected(this);
//创建DBDao
dbDao = new DBDao();
//这一步处理下拉刷新上拉加载
prl.setMode(PullToRefreshBase.Mode.BOTH);
prl.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
page = 1;
if (networkConnected) {
getServerData();
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
prl.onRefreshComplete();
}
}, 2000);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
page++;
if (networkConnected) {
getServerData();
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
prl.onRefreshComplete();
}
}, 2000);
}
});
//有网获取数据
if (networkConnected) {
getServerData();
} else {
//无网走缓存
List<NewsInfo.DataBean> dataBeans = dbDao.queryData();
if (dataBeans.size()!=0) {
MyAdapter adapter = new MyAdapter(this, dataBeans);
prl.setAdapter(adapter);
} else {
Toast.makeText(this, "暂无缓存", Toast.LENGTH_SHORT).show();
}
}
}
//默认获取标签数据
private void getServerData() {
MyAsyncTask task = new MyAsyncTask();
task.execute();
}
private class MyAsyncTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... strings) {
//http://api.expoon.com/AppNews/getNewsList/type/1/p/1
String path = "http://api.expoon.com/AppNews/getNewsList/type/1/p/" + page;
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if (conn.getResponseCode() == 200) {
InputStream inputStream = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
inputStream.close();
String json = bos.toString();
return json;
}
} catch (Exception e) {
e.printStackTrace();
Log.i("xxx", e.toString());
}
return null;
}
@Override
protected void onPostExecute(String s) {
Log.i("xxx", s);
//解析数据
Gson gson = new Gson();
NewsInfo newsInfo = gson.fromJson(s, NewsInfo.class);
List<NewsInfo.DataBean> data = newsInfo.getData();
if (page == 1) {
//创建集合
datas = new ArrayList<>();
//缓存数据之前先清除以前的数据
dbDao.delete();
//缓存数据
dbDao.addData(data);
Toast.makeText(MainActivity.this, "缓存成功", Toast.LENGTH_SHORT).show();
}
datas.addAll(data);
MyAdapter adapter = new MyAdapter(MainActivity.this, datas);
prl.setAdapter(adapter);
// prl.setSelection(adapter.getCount()-20);
}
}
}
//---------------------------------------------------------------------------------
适配器
public class MyAdapter extends BaseAdapter {
Context context;
List<NewsInfo.DataBean> data;
public MyAdapter(Context context, List<NewsInfo.DataBean> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item, null);
viewHolder = new ViewHolder();
viewHolder.tv_title = convertView.findViewById(R.id.tv_title);
viewHolder.iv_head = convertView.findViewById(R.id.iv_head);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
NewsInfo.DataBean dataBean = data.get(position);
String news_title = dataBean.getNews_title();
String pic_url = dataBean.getPic_url();
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_launcher_round)
.cacheOnDisk(true)
.cacheInMemory(true)
//.displayer(new RoundedBitmapDisplayer(20))
.build();
viewHolder.tv_title.setText(news_title);
ImageLoader.getInstance().displayImage(pic_url,viewHolder.iv_head,options);
return convertView;
}
private class ViewHolder {
private TextView tv_title;
private ImageView iv_head;
}
}
数据库
public class DBHelper extends SQLiteOpenHelper {
//构造方法中创建数据库
public DBHelper(Context context) {
super(context, “bw”, null, 1);
}
//创建表
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE IF NOT EXISTS cache (_id INTEGER PRIMARY KEY AUTOINCREMENT,news_title TEXT,pic_url TEXT)";
//SQLiteDatabase执行sql语句
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
这个也行
//1继承SQLiteOpenHelper
public class MySQlite extends SQLiteOpenHelper{
//有参构造
public MySQlite(Context context ) {
//参数:上下,数据库的名字,工厂 null,数据库版本
super(context, “bw.db”, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//db.execSQL(" sql语句");
//2创建数据库
db.execSQL(“CREATE TABLE person(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20))”);
//db.execSQL(“create table person(id inteder primary key autoincrement,name varchar(20))”);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//升级数据库
}
}
//-------------------------------------------------------------------------------------
//Dao包
public class DBDao {
private final DBHelper helper;
private final SQLiteDatabase db;
public DBDao() {
helper = new DBHelper(MyApplication.getInstance());
//通过helper得到SQLiteDatabase
db = helper.getWritableDatabase();
}
//插入数据方法
public void addData(List<NewsInfo.DataBean> data) {
for (int i = 0; i < data.size(); i++) {
ContentValues values = new ContentValues();
NewsInfo.DataBean dataBean = data.get(i);
String news_title = dataBean.getNews_title();
String pic_url = dataBean.getPic_url();
values.put("news_title", news_title);
values.put("pic_url", pic_url);
db.insert("cache", null, values);
}
}
public List<NewsInfo.DataBean> queryData() {
//创建临时集合
List<NewsInfo.DataBean> dataBeans = new ArrayList<>();
//得到Cursor
Cursor cursor = db.query("cache", null, null, null, null, null, null);
while (cursor.moveToNext()) {
NewsInfo.DataBean dataBean = new NewsInfo.DataBean();
String news_title = cursor.getString(cursor.getColumnIndex("news_title"));
String pic_url = cursor.getString(cursor.getColumnIndex("pic_url"));
dataBean.setNews_title(news_title);
dataBean.setPic_url(pic_url);
dataBeans.add(dataBean);
}
return dataBeans;
}
public void delete() {
db.delete("cache", null, null);
}
}