数据库+PullToRefreshListView

本文介绍了一个使用PullToRefreshListView的TabFragment类,用于展示电影列表,并通过异步任务从网络获取数据,同时实现了无网状态下的数据展示。文章详细描述了如何创建数据库、DAO层方法及网络状态检查。

列表展示+数据库主页面
public class TabFragment extends Fragment {
private PullToRefreshListView pul;
private MyAdapter madapter;
private MovieBean gson;
private List<MovieBean.ResultBean> list=new ArrayList<>();
private String url;
private int page=1;
private UserDao dao;
private MovieBean movieBean;
private NeUtil neUtil;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.tabfragment,container,false);
    //获取资源id
    pul=view.findViewById(R.id.pul);
    dao=new UserDao(getActivity());
    //获取地址
    url=getArguments().getString("url");
    //初始化page
    page = 1;
    //获取NeUtil类,实例
    neUtil = new NeUtil();
    //适配器
    madapter = new MyAdapter(getActivity());
    //模式
    pul.setMode(PullToRefreshBase.Mode.BOTH);
    pul.setAdapter(madapter);
//判断有网无网的方法
    initdata();
    //上拉加载下拉刷新
    setlistener();
    return view;
}
private void initdata() {

    if (!neUtil.has(getActivity())){
        //吐司
        Toast.makeText(getActivity(),"联网失败",Toast.LENGTH_SHORT).show();
         madapter.setList(dao.select());
       return;
    }else{
        //创建一个异步请求类
        new MoviewTask().execute(url+page);
    }
}
//上拉加载下拉刷新

private void setlistener() {
//设置监听事件
pul.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
page=1;
new MoviewTask().execute(url+page);
}

        @Override
        public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

            new MoviewTask().execute(url+(++page));
        }
    });
}

class MoviewTask extends AsyncTask<String,Void,List<MovieBean.ResultBean>>{

    @Override
    protected List<MovieBean.ResultBean> doInBackground(String... strings) {

        try {
            String s = HttpUtils.get(strings[0]);
            Gson gson = new Gson();
            movieBean = gson.fromJson(s, MovieBean.class);
            //清空数据
           dao.delect();
            //无网状态下添加到数据库
            for (int i = 0; i< movieBean.getResult().size(); i++){
                dao.add(movieBean.getResult().get(i).getName(), movieBean.getResult().get(i).getSummary(),
                        movieBean.getResult().get(i).getImageUrl(),movieBean.getResult().get(i).getId());

            }
            return dao.select();
        } catch (Exception e) {
            e.printStackTrace();
        }
      return null;
    }
    //展示数据

    @Override
    protected void onPostExecute(List<MovieBean.ResultBean> resultBeans) {
        super.onPostExecute(resultBeans);
        //添加数据
        if (page==1){
            madapter.setList(resultBeans);
        }else {
            madapter.addList(resultBeans);
        }
        //停止刷新加载
        pul.onRefreshComplete();
    }
}

}
创建数据库
public class SqliteHelper extends SQLiteOpenHelper {
public SqliteHelper(Context context) {
super(context, “User.db”, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table users (id integer primary key ," +
            "name text," +
            "summary text," +
            "imageUrl text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}
Dao层方法
public class UserDao {
private final SQLiteDatabase db;

public UserDao(Context context) {
    SqliteHelper helper = new SqliteHelper(context);
     db = helper.getReadableDatabase();
}
//查询
public List<MovieBean.ResultBean> select(){

    Cursor query = db.query("users", null, null, null, null, null, null);
    List<MovieBean.ResultBean> list=new ArrayList<>();
    while (query.moveToNext()){
        String name = query.getString(query.getColumnIndex("name"));
        String summary = query.getString(query.getColumnIndex("summary"));
        String imageUrl = query.getString(query.getColumnIndex("imageUrl"));
        int id = query.getInt(query.getColumnIndex("id"));
        list.add(new MovieBean.ResultBean(imageUrl,name,summary,id));
    }

    return list;
}
//添加
public void add(String name,String summary, String imageUrl,int id){

    ContentValues values=new ContentValues();
    values.put("name",name);
    values.put("summary",summary);
    values.put("imageUrl",imageUrl);
    values.put("id",String.valueOf(id));
    db.insert("users",null,values);
}
//清空数据

public void delect(){
db.execSQL(“DELETE FROM users”);
}
}
数据库工具类
public class NeUtil {

public  boolean has(Context context){
    //创建连接管理器
    ConnectivityManager con = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    //获取最新流动状态
    NetworkInfo activeNetworkInfo = con.getActiveNetworkInfo();

    return activeNetworkInfo!=null&&activeNetworkInfo.isAvailable() ;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值