数据库和图片缓存,PullToRefreshListView上拉加载下拉刷新

//前往别忘记加载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);

}

}

猜你喜欢

转载自blog.csdn.net/weixin_44424692/article/details/86552908